Deep learning/모델 구현 39

18. CNN(5) - CNN 구현하기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. class SimpleConvNet: def __init__ (self,input_dim=(1,28,28),conv_param={'filter_num':30,'filter_size':5, 'pad':0,'stride':1}, hidden_size=100,output_size=10,weight_init_std=0.01): filter_num=conv_param['filter_num'] filter_size=conv_param['filter_size'] filter_pad=conv_param['pad'] filter_stride=conv_param['stride'] input_size=input_dim[1] conv_output_size=(..

17. CNN(4) - 합성곱/풀링 계층 구현하기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 1. 4차원 배열 CNN에서 계층 사이를 흐르는 데이터는 4차원이다. 예를 들어 데이터의 형상이 (10,1,28,28)이면, 이는 높이 28,너비 28, 채널 1개인 데이터가 10개라는 이야기이다. 2. im2col로 데이터 전개하기 im2col은 입력 데이터를 필터링(가중치 계산) 하기 좋게 전개하는 함수이다. 아래 그림과 같이 3차원 입력 데이터에 im2col을 적용하면 2차원 행렬로 바뀐다. 정확히는 배치 안의 데이터 수까지 포함한 4차원 데이터를 2차원으로 변환한다. 위 그림에서는 보기 좋게끔 스트라이드를 크게 잡아 필터의 적용 영역이 겹치지 않도록 했지만, 실제 상황에서는 영역이 겹치는 경우가 대부분이다. 필터 적용 영역이 겹치..

15. CNN(2) - 합성곱 계층

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. CNN에서는 패딩(padding), 스트라이드(stride)등 CNN 고유의 용어가 등장한다. 또, 각 계층 사이에는 3차원 데이터같이 입체적인 데이터가 흐른다는 점에서 완전연결 신경망과 다르다. 1. 완전연결 계층의 문제점 완전연결 계층의 문제점은 바로 데이터의 형상이 무시된다는 사실이다. 입력 데이터가 이미지인 경우를 예로 들면, 이미지는 통상 가로,세로,채널(색상)로 구성된 3차원 데이터이다. 그러나 완전연결 계층에 입력할 때는 3차원 데이터를 평평한 1차원 데이터로 평탄화해줘야 한다. 사실 지금까지의 MNIST 데이터셋을 사용한 사례에서는 형상이 (1,28,28)인 이미지 (1채널, 세로 28픽셀, 가로 28픽셀)를 1줄로 세운 ..

14. 합성곱 신경망(CNN)(1) - 전체 구조

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다, CNN도 지금까지 본 신경망과 같이 레고 블록처럼 계층을 조합하여 만들 수 있다. 다만, 합성곱 계층(convolutional layer)과 폴링 계층(pooling layer)이 새롭게 등장한다. 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있었다. 이를 완전연결(fully connected)이라고 하며, 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했다. 이 Affine 계층을 사용하면, 가령 층이 5개인 완전연결 신경망은 다음 그림과 같이 구현할 수 있다. CNN의 구조는 다음과 같다. 위 그림과 같이 CNN에서는 새로운 합성곱 계층(Conv)와 풀링 계층(pooling)이 추가된다.

13. 학습 관련 기술들 (5) - 적절한 하이퍼파라미터 값 찾기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 신경망에는 하이퍼파라미터가 다수 등장한다. 여기서 말하는 하이퍼파라미터는 각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등이다. 이러한 하이퍼파라미터 값을 적절히 설정하지 않으면 모델의 성능이 크게 떨어지기도 한다. 하이퍼파라미터의 값은 매우 중요하지만 그 값을 결정하기까지는 일반적으로 많은 시행착오를 겪는다. 이번 절에서는 하이퍼파라미터의 값을 최대한 효율적으로 탐색하는 방법을 설명한다. 1. 검증 데이터 하이퍼파라미터의 성능을 평가할 때는 시험 데이터를 사용해서 안 된다. 왜냐하면 시험 데이터를 사용하여 하이퍼파라미터를 조정하면 하이퍼파라미터 값이 시험 데이터에 오버피팅 되기 때문이다. 하이퍼파라미터 조정용..

12. 학습 관련 기술들(4) - 오버피팅, 가중치 감소, 드롭아웃

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 기계학습에서는 오버피팅이 문제가 되는 일이 많다. 오버피팅이란 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태를 말한다. 1. 오버피팅 오버피팅은 주로 다음의 두 경우에 일어난다 1. 매개변수가 많고 표현력이 높은 모델 2. 훈련 데이터가 적음 이처럼 정확도가 크게 벌어지는 것은 훈련 데이터에만 적응(fitting)해버린 결과이다. 훈련 때 사용하지 않은 범용 데이터에는 제대로 대응하지 못하는 것을 이 그래프에서 확인할 수 있다. 2. 가중치 감소 오버피팅 억제용으로 예로부터 많이 이용해온 방법 중 가중치 감소(weight decay)라는 것이 있다. 이는 학습 과정에서 큰 가중치에 대해서는 그..

11. 학습 관련 기술들 (3) - 배치 정규화

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 앞 절에서는 각 층의 활성화값 분포를 관찰해보며, 가중치의 초깃값을 적절히 설정하면 각 층의 활성화값 분포가 적당히 퍼지면서 학습이 원활하게 수행됨을 배웠다. 그렇다면 각 층이 활성화를 적당히 퍼뜨리도록 강제해보면 어떨까? 실은 배치 정규화(Batch Normalization)가 그런 아이디어에서 출발한 방법이다. 1. 배치 정규화 알고리즘 배치 정규화가 주목받는 이유는 다음과 같다. 1. 학습을 빨리 진행할 수 있다 2. 초깃값에 크게 의존하지 않는다 3. 오버피팅을 억제한다 배치 정규화의 기본 아이디어는 앞에서 말했듯이 각 층에서의 활성화값이 적당히 분포되도록 조정하는 것이다. 그래서 다음 그림과 같이 데이터 분포를 정규화하는 '배치..

10. 학습 관련 기술들(2) - 가중치의 초깃값

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 신경망 학습에서 특히 중요한 것이 가중치의 초깃값이다. 1. 초깃값을 0으로 하면? 가중치 감소는 간단히 말하자면 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 만약 가중치의 초깃값을 모두 0으로 설정한다면 어떨까? 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문에 그러면 안된다. 이러한 가중치가 고르게 되어버리는 상황을 막으려면 초깃값을 무작위로 설정해야 한다. 2. 은닉층의 활성화값 분포 입력 데이터로서 1000개의 데이터를 정규분포로 무자구이로 생성하여 이 5층 신경망에 흘린다. 이번에는 표준편차가 1인 정규분포를 이용한다. 이 분포된 정도(표준 편차)를 바꿔가며 활성화값들의 분포가 어떻게 변화하는지 관찰하는 것이 ..

9. 학습 관련 기술들 (1) - 매개변수 갱신(SGD,모멘텀,AdaGrad,Adam)

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 이번 장에서는 신경망 학습의 핵심 개념들을 공부한다. 이번 장에서 다룰 주제는 가중치 매개변수의 최적값을 탐색하는 최적화 방법, 가중치 매개변수 초깃값, 하이퍼파라미터 설정 방법 등, 모두가 신경망 학습에서 중요한 주제이다. 오버피팅의 대응책인 가중치 감소와 드롭아웃 등의 정규화 방법도 간략하게 설명하고 구현해본다. 마지막으로 최근 많은 연구에서 사용하는 배치 정규화도 짧게 알아본다. 이번 장에서 배우는 기법을 이용하면 신경망(딥러닝) 학습의 효율과 정확도를 높일 수 있다. 1. 매개변수 갱신 신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이였다. 이는 곧 매개변수의 최적값을 찾는 문제이며, 이러한 문제를 푸..