개발자 되기 (feat.SSAFY)

[35주차] 나는 왜 머신러닝이 어려웠는가?

쓱쓱565 2022. 3. 7. 11:49

1차 프로젝트가 끝난지 3주가 되었다. 현재는 AI 영상 필터 관련한 프로젝트를 맡아서 진행중이다. 코딩을 하면서 삽질을 가장 많이 했던 기간이라 생각한다. 느꼈던 점들을 간단히 정리해둔다. 

 

 

 

2주차 종합 - 왜 나는 머신러닝이 어려웠는가?

1. 개요

결론: 내가 무엇을 모르는지 몰라서 어려웠다. 이제 나는 내가 무엇을 모르는지 알게되었다. 어떻게 하면 내가 무엇을 모르는지 아는 방법도 배웠다. 아래의 분야 관련한 지식을 습득하고 나면 새로운 코드들을 작성할 수 있을 것이다.

  1. 딥 러닝: 혼자 공부하는 머신러닝 교재. 기본적인 용어 정리중.
  2. 공학 수학/이론: 기초 공학수학 관련 지식이 부족하기에 6주 내로 보강 불가. 엔지니어의 영역을 넘는 부분이므로 쿨하게 생략.
  3. 프레임워크: Tensorflow 튜토리얼 따라해보기 + 머신러닝 교재.
  4. 디지털 영상의 구조: 구글링, 교재 및 도서 참조.
  5. 데이터 압축 방식: 구글링, 교재 및 도서 참조.

배운 것:

  1. 무엇을 배워야 할지 알게 되었다.
  2. 모르는 분야에 접근하는 루틴을 만들고 시행할 수 있게 되었다.
  3. 큰 목표를 작게 쪼개서 당장 할 수 있는 것들을 할 것.
  4. 머신러닝 프레임워크

2. 배운 것들 - 정성적 성과

1) 내가 무엇을 모르는지 파악하는 법

(1) 웹 개발 Vs. 머신러닝

기존에 내가 사용했던 문제 해결 사이클은 아래와 같았다.

  1. 문제를 확인한다.
  2. 에러를 파악한 뒤
  3. 공식문서를 읽어본다.
  4. 예시 코드를 찾는다.

머신러닝에 대해서는 위의 방식을 적용하지 못했다. 그래서 어렵고 막막하다고 생각했다. 왜 위의 방식을 적용하지 못했는지에 대해서 정리해보자.

웹 개발머신러닝

배경지식 있다 없다
무엇을 모르는지 아는가? 아니오
직관적인가? 아니오

웹 개발에 대해서는 내가 암묵적으로 알고 있는 정보들이 많았다. 싸피에서 기본적인 강의도 제공되었다. 그래서 내가 무엇을 모르는지 직관적으로 파악하거나 추측할 수 있었다. 그래서 위의 사이클이 주효했던 것이다.

 

머신러닝분야에서는 그러지 않았다. 공학 수학 지식이 부족했으며, 컴퓨터에 대해서도 마찬자기였다. 모르는 라이브러리가 사용되었다. 심지어 내가 맡은 분야는 ‘영상’이었는데 나는 영상에 대해서도 나는 제대로 알지 못했다. 게이머이자 영화 팬 입장에서 해상도와 화질, 코덱 등에 대해서만 신경썼던 것이다.

 

그래서 문제 해결 사이클을 돌릴 수 없었다. 1) 문제를 제대로 확인하지 못했으며 2) 에러가 정확히 무슨 의미인지 파악하지 못했고 3) 내가 필요로 하는 내용을 특정하지 못했기에 4) 공식문서를 읽어도 제대로 이해하지 못했다. 5) 남의 코드를 찾아보더라도 마찬가지였다.

(2) 해결책

1단계 ‘문제를 확인한다’ 방법을 세분화했다. 그 방법은 아래와 같다.

문제 파악하는 법(세분화됨)

  1. 문제가 생긴 키워드를 파악한다.
  2. 키워드를 구글과 RISS 등에서 검색한다.
  3. 주요 자료의 `초록` 을 읽으면서 `키워드``상위 개념`을 파악한다.
  4. `한 권으로 읽는 컴퓨터 구조와 프로그래밍` 책에서 해당 분야의 내용을 짧게 훑는다.
  5. 주요 자료들을 계속 읽으며 해당 분야의 `키워드` 에 익숙해진다.
  6. 공식 문서를 이해한다.

예시를 들면 아래와 같다.

  1. 문제 파악
    1. 멘토님상에 레이어는 2개정도면 적절하겠어요. 엠펙과 코덱에 대해 공부하시면...
  2. 왜 이 문제에 레이어, 코덱, 엠펙같은 키워드가 등장하는가? 이것들은 무엇인가?
    1. mpeg: 영상 압축 기술
    2. 코덱: 인코더 - 디코더.
    3. 영상에 왜 ‘레이어’가 있는가?
  3. 해당 키워드들의 공통점: ‘압축’
  4. 손실 압축, 무손실 압축, 아날로그의 디지털 표현 등에 대해서 개념을 훑음.
  5. 왜 위의 키워드들이 중요한지 이해 가능.

(3) 느낀 점

조급해할 필요가 전혀 없다. 지금 내가 할 수 있는 것을 하면 된다. 코딩을 잘 하는 것 말고도 팀에 기여할 수 있는 방법은 많다.

웹 프레임워크는 굉장히 강력하다. 컴퓨터를 제대로 다루지 못하는 사람이라도 국비학원에서 `3개월` 만 배우면 간단한 웹페이지를 제작할 수 있다. 웹 프레임워크 덕분에 6개월 코딩 배운 사람이 `최종 프로젝트 최우수상` 같은 것을 받을 수 있었던 것이다. 내가 웹에 대해서 잘 모르지만 내 웹페이지는 멀쩡했던 것처럼, 내가 머신러닝에 대해서 잘 알지 못한다 하더라도 시간을 투자해서 해보면 뭔가 괜찮은 결과를 낼 수 있을 것이다. 그러라고 있는 프레임워크니까.

3. 배운 것들 - 정량적 성과

(1) 용어집

(2) 세미나 요약

 

(3) 혼공머 샘플 코드 (공부자료)

(4) 기타 공부했던 내용들

(99) 참고했던 자료들

혼자 공부하는 머신러닝

[혼자 공부하는 머신러닝+딥러닝 - YES24](http://www.yes24.com/Product/Goods/96024871)

한컴프

[한 권으로 읽는 컴퓨터 구조와 프로그래밍 - YES24](http://www.yes24.com/Product/Goods/98997716)