신경망 학습
학습이란 훈련 데이터로부터 가중치 매개변수의 최적 값을 자동으로 획득하는 것을 의미
데이터 주도 학습
기계학습에서는 사람의 개입을 최소화하고 수집한 데이터로부터 패턴을 찾으려 시도합니다.
게다가 신경망과 딥러닝은 기존 기계학습에서 사용하던 방법보다 사람의 개입을 더욱 배제할 수 있게 해주는 중요한 특성을 지닙니다.
예를 들어, 자유분방한 손글씨 이미지를 보고 5인지 아닌지를 알아보는 프로그램을 구현해봅시다.
- 5를 제대로 분류하는 프로그램을 직접 고안해 설계하기란 의외로 어려운 문제입니다.
- 사람이라면 어렵지 않게 인식하지만, 그 안에 숨은 규칙성을 명확한 로직으로 풀기가 만만치 않습니다.
- 5를 인식하는 알고리즘을 밑바닥부터 설계하는 대신, 주어진 데이터를 잘 활용해서 해결하고 싶어집니다.
- 그런 방법의 하나로, 이미지에서 특징을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법
- 이미지의 특징은 보통 벡터로 기술
기계학습에서는 모아진 데이터로부터 규칙을 찾아내는 역할을 ‘기계’가 담당합니다.
다만, 이미지를 벡터로 변환할 때 사용하는 특징은 여전히 ‘사람’이 설계해야 합니다.
즉, 특징과 기계학습을 활용한 접근에도 문제에 따라서는 ‘사람’이 적절한 특징을 생각해내야 합니다.
신경망은 이미지를 ‘있는 그대로’ 학습합니다.
특징과 기계학습 방식에서는 특징을 사람이 설계했지만, 신경망은 이미지에 포함된 중요한 특징까지도 ‘기계’가 스스로 학습합니다.
그래서 딥러닝을 종단 간 기계학습 (end to end machine learning)이라고도 합니다.
- 여기서 종단간은 처음부터 끝까지라는 의미로, 데이터(입력)에서 목표한 결과(출력)를 사람의 개입 없이 얻는다는 뜻을 담고 있습니다.
- 신경망의 이점은 모든 문제를 같은 맥락에서 풀 수 있다는 점입니다.
- 예를 들어 ‘5’를 인식하는 문제든, ‘개’를 인식하는 문제든, 아니면 ‘사람의 얼굴’을 인식하는 문제든, 세부사항과 관계없이 신경망은 주어진 데이터를 온전히 학습하고, 주어진 문제의 패턴을 발견하려 시도합니다.
- 즉, 신경망은 모든 문제를 주어진 데이터 그대로를 입력 데이터로 활용해 ‘end-to-end’로 학습합니다.
손실 함수(Loss Function)
신경망 학습에서는 현재의 상태를 손실 함수로 표현하고, 손실 함수를 최소화하는 가중치 매개변수의 값을 탐색하는 것이 목표입니다.
손실 함수는 다음 글을 참고해주세요!
https://wannabenice.tistory.com/20
미니 배치 학습
훈련 데이터에 대한 손실 함숫값을 최소화하는 매개변수를 탐색하기 위해서는 모든 훈련 데이터를 대상으로 손실 함숫값을 구해야 합니다.
훈련 데이터 모두에 대한 손실 함수의 평균으로 비교를 합니다.
예를 들어, 손실 함수로서 교차 엔트로피 오차를 사용하게 되면 다음과 같을 것입니다.
- N : 데이터의 수
- tnk, ynk : n번째 데이터의 k번째 값 의미
- ynk : 신경망의 출력
- tnk : 정답 레이블
N으로 나눔으로써 ‘평균 손실 함수’를 구합니다.
이렇게 평균을 구해 사용하면 훈련 데이터 개수와 관계없이 언제든 통일된 지표를 얻을 수 있습니다.
만약 수백만, 수천만 데이터에 대해서 모든 데이터를 대상으로 손실 함수의 합을 구하려면 시간이 좀 걸릴 것이고, 일일이 손실 함수를 계산하는 것은 현실적이지 않을 것입니다.
이런 경우 데이터 일부를 추려 전체의 '근사치'로 이용할 수 있습니다.
훈련 데이터로부터 일부만 골라 학습을 수행해서 손실 함수를 비교합니다.
모집단 모두가 아닌 특정 수의 샘플을 무작위로 추출해 살펴본다고 생각하시면 될 것 같습니다.
기울기(Gradient)
모든 변수의 편미분을 벡터로 정리한 것입니다.
기울기가 가리키는 쪽(기울기의 결과에 마이너스를 붙인 벡터)은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다.
f(x0, x1) = x02 + x12의 기울기를 표현한 이미지입니다.
기울기는 가장 낮은 장소를 가리키고 있습니다.
경사법(경사 하강법)
신경망 역시 손실 함수가 최솟값이 될 때의 매개변수 값, 최적의 매개변수(가중치와 편향)를 학습 시에 찾아야 합니다.
일반적인 문제의 손실 함수는 매개변수 공간이 광대하여 어디가 최솟값이 되는 곳인지를 짐작할 수 없습니다.
이런 상황에서 기울기를 잘 이용해 함수의 최솟값(또는 가능한 한 작은 값)을 찾으려는 것이 경사법입니다.
여기에서 주의할 점은 각 지점에서 함수의 값을 낮추는 방안을 제시하는 지표가 기울기라는 것입니다.
경사법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동하고, 이동한 곳에서도 마찬가지로 기울기를 구하고, 또 그 기울어진 방향으로 나아가기를 반복하여 함수의 값을 점차 줄이는 방법입니다.
기울기가 가리키는 곳에 정말 함수의 최솟값이 있는지, 즉 그쪽이 정말로 나아갈 방향인지는 보장할 수 없습니다.
실제로 복잡한 함수에서는 기울기가 가리키는 방향에 최솟값이 없는 경우가 대부분입니다.
경사법은 기울기가 0인 장소를 찾지만 그것이 반드시 최솟값이라고는 할 수 없습니다.
- 경사 하강법 : 최솟값을 찾는다
- 경사 상승법 : 최댓값을 찾는다
경사법 수식
- Π (eta,에타) : 갱신하는 양
- 신경망 학습에서는 학습률(learning rate)이라 함
- 한 번의 학습으로 얼마만큼 학습해야 할지, 즉 매개변수 값을 얼마나 갱신하느냐를 정하는 것이 학습률
위의 식은 1회에 해당하는 갱신이고, 이 단계를 여러 번 반복하면서 서서히 함수의 값을 줄입니다.
변수의 수가 늘어도 각 변수마다, 각 변수의 편미분 값으로 갱신하면 됩니다.
학습률과 같은 매개변수를 하이퍼 파라미터(hyper parameter, 초매개변수)라고 합니다.
이는 가중치와 편향 같은 신경망의 매개변수와는 성질이 다른 매개변수입니다.
신경망의 가중치 매개변수는 훈련 데이터와 학습 알고리즘에 의해서 ‘자동’으로 획득되는 매개변수인 반면, 학습률 같은 하이퍼 파라미터는 사람이 직접 설정해야 하는 매개변수입니다.
일반적으로는 이 하이퍼 파라미터들은 여러 후보 값 중에서 시험을 통해 가장 잘 학습하는 값을 찾는 과정을 거쳐야 합니다.
학습률 값은 일반적으로 값이 너무 크거나 작으면 ‘좋은 장소’를 찾아갈 수 없습니다.
학습률이 너무 크면 큰 값으로 발산하고, 반대로 너무 작으면 거의 갱신되지 않은 채 끝나버립니다.
신경망 학습에서는 보통 이 학습률을 변경하면서 올바르게 학습하고 있는지를 확인하면서 진행해야 합니다.
가중치 매개변수에 대한 손실 함수의 기울기
- 각각의 원소에 관한 편미분
- 1행 1열 (1,1)의 원소는 w11을 조금 변경했을 때 손실 함수 L이 얼마나 변화하느냐를 나타냄
- 예를 들면, (1,1)의 원소가 0.2라는 의미는 w11을 h만큼 늘리면 손실 함수의 값은 0.2h만큼 증가한다는 의미
- 중요한 점은 편미분한 형상이 W의 형상과 같다는 점 (2x3)
확률적 경사 하강법(SGD, stochastic gradient descent)
경사 하강법으로 매개변수를 갱신하는 방법이며, 이때 데이터를 미니 배치로 무작위로 선정하기 때문에 확률적 경사 하강법이라고 부릅니다.
확률적으로 무작위로 골라낸 데이터에 대해 수행하는 경사 하강법이라는 의미를 뜻합니다.
대부분의 딥러닝 프레임워크는 확률적 경사 하강법, SGD라는 함수로 이 기능을 구현합니다.
신경망 학습의 절차 (정리)
신경망 학습의 절차를 정리해보겠습니다.
우선 신경망에는 적응 가능한 가중치와 편향이 있고, 이 가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 ‘학습’이라고 합니다.
- 미니 배치
- 훈련 데이터 중 일부를 무작위로 가져옴
- 이렇게 선별한 데이터를 미니 배치라 하며, 그 미니 배치의 손실 함숫값을 줄이는 것이 목표
- 기울기 산출
- 미니 배치의 손실 함숫값을 줄이기 위해 각 가중치 매개변수의 기울기를 구함
- 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시
- 매개변수 갱신
- 가중치 매개변수를 기울기 방향으로 아주 조금 갱신
- 반복
Reference
본 글은 '밑바닥부터 시작하는 딥러닝'을 참고하여 작성하였습니다.
'Data Science > Deep Learning' 카테고리의 다른 글
[DL] 신경망 학습 - 매개변수 갱신, 가중치의 초기값 (0) | 2022.03.17 |
---|---|
[DL] 오차역전파법(Backpropagation) (2) | 2022.03.08 |
[DL] 손실함수 (Loss Function) : 오차제곱합(SSE), 교차 엔트로피 오차(Cross-Entropy) (0) | 2022.03.04 |
[DL] 신경망(Neural network) (0) | 2022.02.25 |
[DL] 신경망 활성화 함수 - 시그모이드(sigmoid), ReLU, 계단함수 (0) | 2022.02.25 |
댓글