ML
-
[NLP] 활성화값 분포를 고르게 하는 배치 정규화 Batch NormalizationML/NLP 2020. 4. 24. 03:52
이전 포스팅에서는 각 층의 활성화값 분포를 관찰해보며, 가중치의 초깃값을 적절히 설정하면 각 층의 활성화값 분포가 적당히 퍼지면서 학습이 원활하게 수행됨을 봤다. 이번 포스팅에서는 각 층이 활성화를 적당히 퍼뜨리도록 '강제'하는 아이디어에서 시작한 배치 정규화(Batch Normalization)를 봐보자. 배치 정규화 알고리즘 배치 정규화가 주목받는 이유는 다음과 같다. 학습 속도가 개선된다. 초깃값에 크게 의존하지 않는다. 오버피팅을 억제하여 드롭아웃 등의 필요성이 감소한다. 배치 정규화의 기본 아이디어는 앞서 말했듯 각 층에서의 활성화값이 적당히 분포되도록 조정하는 것이다. 그래서 [그림 1]과 같이 데이터 분포를 정규화하는 '배치 정규화(Batch Norm) 계층'을 신경망에 삽입한다. 배치 정규..
-
[NLP] 신경망 학습에서 증말 중요한 가중치의 초기값 정하기↗ML/NLP 2020. 4. 21. 04:17
이번 포스팅에서는 신경망 학습에서 특히 중요한 가중치의 초깃값에 대해 설명하겠다. 초깃값을 0으로 하면? 오버피팅을 억제해 범용 성능을 높이는 테크닉인 가중치 감소(weight decay) 기법을 소개하겠다. 가중치 감소는 간단히 말하자면 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 가중치 값을 작게 하여 오버피팅이 일어나지 않게 하는 것이다. 가중치를 작게 만들고 싶으면 초깃값도 최대한 작은 값에서 시작하는 것이 맞겠다. 그러면 가중치의 초깃값을 모두 0으로 설정하면 어떻게 될까? 실제로 가중치 초깃값을 0으로 하면 학습이 올바로 이뤄지지 않는다. 초기값을 모두 0으로 하면 안되는 이유는, 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문이다. 가중치들은 같은 초깃값에서 시작하고 갱신을..
-
[NLP]신경망 최적화 함수들 Optimizer: SGD, Momentum, AdaGrad, AdamML/NLP 2020. 4. 20. 05:02
신경망 학습의 핵심 개념인 가중치 매개변수의 최적값을 탐색하는 최적화 방법에 대해 포스팅 하겠다. 신경망 학습의 목적은 손식 함수의 값을 낮추는 매개변수를 찾는 것이고, 이는 곧 매개변수의 최적값을 찾는 문제이며, 이러한 문제를 푸는 것을 최적화(optimization)이라 한다. 특히 이번 포스팅에서는 최적화를 가능하게 하는 기법들 중 SGD, Momentum, AdaGrad, Adam에 대해 설명하도록 하겠다. 확률적 경사 하강법(SGD) SGD는 다음과 같은 수식으로 쓸 수 있다. 여기서 W는 갱신할 가중치 매개변수고 ∂L/∂W는 W에 대한 손실 함수의 기울기이다. η은 학습률을 의미하는데, 실제로는 0.01이나 0.001과 같은 값을 미리 정해서 사용한다. 수식에서 보듯 SGD는 기울어진 방향으로..
-
[NLP] 오차역전파로 간단한 mnist 학습 진행 (모든 계층을 직접 코딩해보자)ML/NLP 2020. 4. 10. 02:39
이전 포스팅에 이어서 활성화 함수 계층 구현부터 배워보겠다. 이전 포스팅 > https://dokylee.tistory.com/36 [NLP] 오차역전파법 역전파 backpropagation 앞서 신경망 학습에 대해 포스팅할 때는 가중치 매개변수의 기울기(가중치 매개변수에 대한 손실 함수의 기울기)를 수치 미분을 사용해 구했다. 수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다.. dokylee.tistory.com 이번 포스팅에서는 계산 그래프를 신경망에 적용해보자. 활성화 함수 계층 구현하기 1. ReLU 계층 구현 활성화 함수로 사용되는 ReLU의 수식은 다음과 같다. [그림 1]에서 x에 대한 y의 미분은 [그림 2]처럼 구한다. [그림 2]에서와 같이 순전파 때의 입력인 x가 0보..
-
[NLP] 오차역전파법 역전파 backpropagationML/NLP 2020. 4. 6. 02:38
앞서 신경망 학습에 대해 포스팅할 때는 가중치 매개변수의 기울기(가중치 매개변수에 대한 손실 함수의 기울기)를 수치 미분을 사용해 구했다. 수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다. 이번에는 가중치 매개변수의 기울기를 효율적으로 계산하는 '오차역전파법 backpropagation'을 배워보겠다. 계산 그래프를 통해 공부해보겠다. 계산 그래프(computational graph)는 계산 과정을 그래프로 나타낸 것이다. 여기서 그래프는 우리가 잘 아는 그래프 자료구조로, 복수의 노드(node)와 에지(edge)로 표현된다. 계산 그래프로 풀다 문제1. 슈퍼에서 1개에 100원인 사과를 2개 샀습니다. 이때 지불 금액을 구하세요. 단, 소비세가 10% 부과됩니다. [그림 1]과 같이 처..
-
[NLP] 간단하게 경사 하강법과 학습 알고리즘 구현해보기ML/NLP 2020. 3. 26. 22:21
경사 하강법을 알려면 미분부터 보고 넘어가야 한다. 수치 미분 계산 구현할 수식? (f(x+h)-f(x)) / h 구현 # 나쁜 구현 예 def numerical_diff(f,x): h = 10e-50 return (f(x+h)-f(x)) / h - 위의 구현을 개선해야 할 점 'h = 10e-50'처럼 너무 작은 값을 이용하면 컴퓨터로 계산하는 데 문제가 됨 -> 분모가 0.0이 될 수도 있음 진정한 미분은 x 위치의 함수의 기울기(접선)에 해당하지만, 이번 구현에서의 미분은 (x+h)와 x 사이의 기울기에 해당 수정 후 구현 # 개선된 미분 함수 def numerical_diff(f,x): h = 1e-4 # 0.0001 return (f(x+h) - f(x-h)) / (2*h) * 수치미분 vs 해..
-
[NLP] 신경망 학습을 시작해보자 : 손실 함수를 중심으로↗ML/NLP 2020. 3. 18. 02:11
이번 주제는 드디어 신경망 학습이다! 학습이란, 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것이다. 신경망을 학습시키려면 잘 하고 있는 건지 확인이 필요하다~ 그때 사용하는 지표가 손실 함수이다. 즉, 손실 함수의 값을 확인해가면서 더 들어 맞는 가중치 매개변수 쪽으로 학습이 진행되는 거다. 학습은 데이터가 중심이다! 기계학습은 데이터가 생명이다. 대부분 학습을 할 때는 사람의 개입을 최소화하여 수집한 데이터로부터 패턴을 찾으려고 시도한다. 게다가 신경망과 딥러닝은 기존 기계학습에서 사용하던 방법보다 사람의 개입을 더욱 배제할 수 있게 해주는 중요한 특성을 지녔다. 하나의 예를 들어보겠다. '5'를 뜻하는 손글씨 이미지들이 여러 개 모여있다고 하자. 이때, 기존에 가지고 있던 데이터를..
-
[NLP] 신경망의 활성화 함수들 (Activation Functions of Neural Network) - 3ML/NLP 2020. 3. 14. 00:45
이전 포스팅에서 신경망의 구조를 배웠으니 예제에 적용해보자. 예제로 아주 유명한 손글씨 분류 데이터셋을 가지고 해보겠다. 손글씨 숫자 인식 이미 학습된 매개변수를 사용하여 학습 과정은 생략하고, 추론 과정만 구현하겠다. 이 추론 과정을 신경망의 순전파(forward propagation)라고도 한다. import sys, os sys.path.append(os.pardir) # 부모 디텍터리의 파일을 가져올 수 있도록 설정 from dataset.mnist import load_mnist (x_train, y_train), (x_test, y_test) = load_mnist(flatten=True, normalize=False) print(x_train.shape) print(y_train.shape)..