책에서 하위층 상위층 표현이 자주 나오는데 입력이 아래쪽에서 위쪽으로 올라간다고 생각하면 되겠다.

 

 

층 파라미터 수가 어떻게 계산되는 것인지 직접 확인해 보았다.

파라미터 수 계산, 맥스 풀링

이미지 32개라는 표현보다는 32채널이라는 표현이 좋았을거 같다..

64번 반복이라고 썼는데 같은 과정을 반복한다는 의미로 쓴 것은 아니다.

두 번째 층에서 커널과 점곱해서 만들어진 32개의 행렬을 더한 값들에 편향값을 더한 것이 출력 특성맵이 된다.

이미지 데이터 증식에 사용되는 ImageDataGenerator 클래스

 

datagen.flow_from_directory() 

train_dir를 입력으로 받는데, 하위 디렉터리를 클래스마다 만들어주고 그 디렉터리마다 이미지 파일을 저장해주면

따로 레이블 array를 만들어주지 않아도 알아서 만들어준다.

 

책에는 fit_generator함수를 통해 모델을 제너레이터로 훈련할 수 있다고 했는데 텐서플로 2.3 버전에서 deprecated되어 fit함수로 사용할 수 있게 되었다고 한다. evaluate() 도 검증용 제너레이터 만들어서 넣어주면 된다.

 

모델을 훈련할 때 디렉터리를 정리하지 않고 datagen.flow() 를 사용한다면 레이블을 수동으로 만들어줘야 한다. 

 

 

 

4.4 과대적합을 해결하는 방법
4.5 머신러닝 작업흐름

정확도, 정밀도, 재현율, F1 Score(정밀도와 재현율의 조화 평균)을 성공 지표로 사용할 수 있다고 한다.

4가지 모두 사이킷런 라이브러리에 구현 되어있다고 한다. 

 

먼저 과대적합 모델을 만들고 규제를 통해 천천히 모델을 일반화 하는 방법이 정석인 듯 하다.

하이퍼파라미터 튜닝 과정이 가장 시간이 오래 걸리는 작업이라고 한다. 

4.1 머신러닝의 분류

이 책에서 전부 다루지는 않겠지만 알아는 두자

4.2 머신러닝 모델 평가 방법

(수정) 단순 홀드 아웃 검증 방법은 데이터가 많을 때 쓰는 방법이라고 한다.

4.3 데이터 전처리

 

 

이번에 k fold 검증은 책을 따라서 직접 구현 했지만 나중에 k fold 검증을 쓰게 된다면 사이킷런 라이브러리를 사용하도록 해야겠다.

 

 

확률적 모델링

  • 나이브 베이즈 알고리즘

- 모든 입력 특성이 독립적이라고 가정했을 때 조건부 확률을 사용하여 특정 클래스에 속할 확률을 계산하는 방식

베이즈 정리

 

모든 특성이 독립적일 경우 조건부 확률

- 지도 학습 환경에서 훈련 데이터가 적어도 효율적으로 파라미터를 훈련 시킬 수 있다는 장점이다.

- 단순하지만 복잡한 문제에도 잘 적용된다고 한다. (스팸 메일 분류기 등)

- 연속형 데이터보다 이산형 데이터에서 성능이 좋다.

 

  • 로지스틱 회귀

- 이름이 회귀인데 분류 알고리즘이다. 0 ~ 1 사이로 한 클래스에 속할 확률을 예측한다.

- 시그모이드 함수에 특성 값들과 파라미터 값들을 내적한 값인 log-odds를 넣어서 0 ~ 1사이의 값으로 변환

- 손실 함수는 로그 손실을 사용하고, 경사하강법을 통해 파라미터 값 조정한다.

 

초창기 신경망

  • LeNet - 1 ( 1990년 ) 
  • LeNet - 5 ( 1998년 )

- CNN의 초기 버전 

 

커널 방법 (1990년대)

  • 서포트 벡터 머신

- 서포트 벡터는 클래스 분류를 위한 결정 경계를 만드는데 사용하는 데이터 포인트들이다. (결정 경계에서 가장 가까운 데이터 포인트)

- 이상치를 얼마나 허용하는지에 따라 마진 값(서포트 벡터와 결정 경계 사이의 거리)가 달라지고, 과대적합 혹은 과소적합이 될 수도 있다.

- 다항식 커널과 가우시안 커널을 사용하면 원래 가지고 있는 데이터의 차원을 더 높은 차원의 데이터로 변환한다.

- SVM는 회귀 문제에도 사용할 수 있다고 한다.

- 단점 : 얕은 학습 방법이기 때문에 수동으로 유용한 표현을 추출하는 과정(특성 공학)이 필요한데, 이게 어렵다.

또한 대용량의 데이터셋에 확장되기가 어렵다.

 

결정 트리, 랜덤 포레스트, 그래디언트 부스팅 머신 (2000년대)

  • 결정트리

- 분류와 회귀 모두 가능

- 가지치기와 최대 리프, 깊이 제한으로 과대적합을 막음

  • 랜덤 포레스트

- 여러개의 트리를 랜덤하게 많이 만들고 평균을 내서 결과를 얻는 방법

- 각각의 트리는 그래도 어느정도 예측은 할 수 있어야 한다.

- 트리를 만들 때 데이터 포인트를 랜덤하게 선택하거나 특성을 랜덤으로 선택하여 만든다.

- 성능이 괜찮지만, 텍스트와 같이 차원이 높은 경우는 속도가 느린 편이다.

  • 그래디언트 부스팅 머신

- 랜덤 포레스트와 다른 점은 무작위성 대신 얕은 가지를 많이 사용 한다는 점

- 이전 트리에서 놓친 데이터 포인트를 보완하는 새로운 트리를 반복해서 추가해 나가는 방식

- 경사 하강법을 사용

 

- XGBoost, Light GBM, CatBoost들이 그래디언트 부스팅 머신에서 발전한 모델이다. 성능과 속도가 더 좋다.

딥러닝 (2010년대)

- 2012년 이후부터 자연어 처리, 컴퓨터 비전 작업의 주력 알고리즘이 됨

- 특성 공학을 자동화 해줘서 문제 해결이 더 쉬워짐

 

최근 동향(2018 년도 기준) - 지금은 모름

- 구조적인 데이터 문제에는 그래디언트 부스팅을 XGBoost 라이브러리를 사용하여 해결

- 이미지 분류와 같은 지각 문제에는 딥러닝을 케라스 라이브러리를 사용하여 해결

+ Recent posts