Keyword
- 인공 뉴런(퍼셉트론) : 입력값, 가중치, 편향을 이용해 출력값을 내는 수학적 모델
- 단층 인공 신경망 : 퍼셉트론을 하나만 사용하는 인공 신경망
- 다층 인공 신경망 : 퍼셉트론을 여러 개 사용하는 인공 신경망
- Layer : 입력값을 표현하는 입력층, 신경망의 출력을 계산하는 출력층, 입력층 이후부터 출력층 전까지는 은닉층 (hidden layer)
- 가중치는 입력의 중요도. 편향은 활성화의 경계가 원점으로부터 얼마나 이동할지를 결정
- 활성화 함수 : 해당 뉴런의 출력을 다음 뉴런으로 넘길지를 결정. 시그모이드 함수는 뉴런의 출력값을 0과 1사이로 고정함.
- 손실 함수 (Loss function) : 정답과 신경망의 예측의 차이를 나타내는 함수
- 경사 하강법 : 손실을 가중치에 대해 미분한 다음, 기울기의 반대 방향으로 학습률만큼 이동시키는 알고리즘
- 오차 역전파 : 올바른 가중치를 찾기 위해 오차를 출력층으로부터 입력층까지 전파하는 방식
- 오버피팅 (과적합) : 학습에 사용한 데이터에 최적화되게 학습되어 다른 데이터에 대한 예측 성능이 떨어지는 경우
- 기울기 소실 : 출력층으로부터 멀어질수록 역전파되는 오차가 0에 가까워지는 현상
2.1 퍼셉트론
ANN(Artificial Neural Network)는 사람의 신경망을 본떠 만든 알고리즘을 말한다. Perceptron은 인공 뉴런을 뜻하며, 사람의 뇌세포(뉴런)를 수학적으로 표현한 것이다. ANN은 perceptron의 집합체로 하나의 뉴런이 존재하면 단층 신경망, 여럿을 조합하면 다층 신경망이라고 부른다.
퍼셉트론은 입력층, 노드(인공 뉴런), 출력층으로 구성된다. 뇌세포는 다른 뇌세포로부터 임곗값 이상의 자극을 받지 않으면 다음 뇌세포로 정보를 전달하지 않는다. 이와 비슷하게 ANN 또한 입력값에 가중치를 곱해 더해준 다음, 활성화 함수를 이용해 다음 노드에 정보를 전달할지 말지를 결정한다.
활성화 함수로는 시그모이드 함수를 이용한다. 시그모이드 함수는 실수 전체의 모든 입력에 대해 출력이 0과 1 사이의 실수만을 갖게 된다. 시그모이드 함수를 사용하는 이유는 인공 신경망의 출력을 확률로써 다루기 위해서이다.
2.2 단층 신경망 vs 다층 신경망
단층 신경망은 하나의 직선을 이용해 데이터를 분류하는 반면, 다층 신경망은 선을 여러 번 그어서 데이터를 분류한다.
직선 하나로 구분이 불가능한 데이터 분포도 직선을 여러 개 이용하면 구분할 수 있다. 직선 하나를 사용하면 단층 퍼셉트론, 여러 층에 걸쳐 퍼셉트론이 분포되어 있으면 다층 퍼셉트론 (MLP)라고 부른다. 비슷하게 하나의 층이 존재하는 신경망을 단층 신경망, 여러 층이 존재하는 신경망을 다층 신경망이라고 한다. (신경망 > 퍼셉트론)

다층 신경망 구조
다층 신경망은 그림과 같이 입력층, 은닉층, 출력층으로 구성된다. 신경망의 하나의 층에서 노드의 수를 '층의 너비', 층의 개수를 '층의 깊이'라고 한다.
2.3 손실 함수
오차를 구하는 함수를 오차 함수 혹은 손실 함수라고 하며, 손실 함수의 값이 결정 경계의 성능을 간접적으로 나타낸다. (인공지능의 성능을 증명하는 가장 중요한 지표 중 하나)
대표적인 손실 함수로는 평균 제곱 오차, 크로스 엔트로피 오차 등이 존재한다.

- MSE(Mean Squared Error, 평균 제곱 오차) : 모델이 예측한 값과 실제 값의 차이의 제곱의 평균값. 오차가 두드러지는 부분을 잡아내기 쉽다. 회귀 분석에 주로 사용.

- CE(Cross Entropy, 크로스 엔트로피 오차) : 두 확률 분포의 차이를 구하는 함수. 분류 문제에서는 ANN의 출력이 확률 분포이므로 확률 분포의 차를 구하는 함수가 필요하다. 크로스 엔트로피는 정답값의 확률과 모델이 예측한 확률에 로그를 취한 값을 곱해서 구한다.
- MAE(Mean Average Error, 평균 절대 오차) : 정답과 예측값 차이의 절댓값의 평균값.
- RMSE(Root Mean Squared Error, 평균 제곱근 오차) : MSE의 제곱근. 값의 왜곡을 줄임.
2.4 경사 하강법, 오차 역전파
데이터 분포가 복잡해질수록 은닉층의 깊이를 늘리거나, 은닉층의 뉴런 개수를 늘리게 된다. 그러면 은닉층마다 데이터를 구분하는데 사용할 가중치를 구하기 어려어진다. 손실함수의 최적값을 찾기 위해서는 최적화된 weight와 bias를 찾아야한다. 이는 즉, 방정식을 푼다는 의미이고, 가중치와 편향이 늘어날수록 방정식의 복잡도 또한 증가하기 때문에 찾기 어려워진다. 이를 해결하기 위해 사용하는 것이 경사 하강법과 오차 역전파이다.
2.4.1 경사 하강법 (gradient descent)
함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 최솟값에 이를 때까지 반복시키는 학습 방법을 경사 하강법이라고 한다.
경사 하강법에서는 시작점으로부터 어느 정도 이동할지를 손실 함수의 기울기와 학습률(learning rate)로 결정한다.

사진 설명을 입력하세요.
이때 가중치는 시작점으로부터 기울기 크기만큼 이동하게 되는데, 학습률을 이용해 더 많이 이동하거나 더 적게 이동할 수 있다. 이것을 수식으로 나타내면 다음과 같다.
여기서 알파가 학습률, w'이 가중치의 새로운 값을 의미한다. 학습률이 너무 크면 최솟값을 지나쳐버릴 수 있고, 너무 작게 설정하면 최솟값에 도달하기까지 지나치게 많은 반복을 할 수 있다. 따라서 적절한 학습률을 설정해주어야한다.
2.4.2 오차 역전파 (Back propagation)
Chain rule을 이용해 output에서 가까운 순서대로 거꾸로 출력된 가중치들을 갖고 그 가중치들을 update하는 과정을 말한다. 즉, 출력층부터 역순으로 gradient를 전달하여 전체 layer의 가중치를 update하는 방식이다.
2.5 활성화 함수 (Activation Function)
오차가 역전파될 때 층을 한 번 거칠 때마다 시그모이드의 도함수가 곱해진다. 하지만 시그모이드의 도함수는 최댓값이 0.25이기 때문에 곱해질 때마다 오차가 점점 줄어들게 된다. 즉, 층이 너무 깊어지면 출력층에 가까운 은닉층들은 제대로 학습되지만, 입력층에 가까운 은닉층들은 제대로 학습되지 않는다.

Sigmoid Function
또한, 시그모이드 함수는 실수 전체를 0과 1 사이의 값으로 압축한다. 따라서 값이 커질수록 기울기 크기가 0에 가까워지게 된다. 이를 기울기 소실 문제(Vanishing Gradient)라 한다. 이를 해결하기 위해서는 미분해도 값이 줄어들지 않는 활성화 함수가 필요하다.

ReLU
위는 ReLU 함수의 그래프이다. ReLU함수를 미분하면 0보다 큰 범위에서 기울기 1을 갖기 때문에 기울기 소실 문제가 발생하지 않는다. 하지만 0보다 작은 범위에서는 0을 반환하기 때문에 그 뉴런과 연결되어 있는 다음 층의 뉴런은 입력의 일부가 0이 된다. (정보 소실) 따라서 모델을 만들 때는 은닉층의 깊이, 활성화 함수, 손실 함수 등을 복합적으로 고려해야 한다.
**그외

- Hyperbolic Tangent : Sigmoid와 동일하게 입력값이 커질수록 Vanishing Gradient 문제 발생. 하지만 평균은 0이 됨.

- Softmax : multi classification에 사용됨. 벡터 함수. k개의 숫자를 입력받아 k개의 요소를 갖는 확률 분포로 변환하는 함수.
++ 6개월 전에 분명 다 배웠던 건데, 제대로 안하니까 몇 번을 다시 보는지 ㅎ.. 처음 배울 때 확실히 개념을 정리하자..
'Pytorch' 카테고리의 다른 글
[텐초의 파이토치 딥러닝 특강] Ch01 딥러닝 한 눈에 살펴보기 (0) | 2023.08.20 |
---|