이 글은 충남대학교 양희철 교수님의 수업을 듣고 작성한 글입니다
1. Deep Neural networks(DNN)
Hidden Layer를 늘리면 사람의 뉴런처럼 더 많은 레이어를 가지기 때문에 비선형 문제에 대해서도 좋은 성능을 보인다. (레이어를 늘림 => 가중치, 파라미터 수 증가 => 더 복잡한 문제 해결 가능)
따라서 DNN은 아주 큰 크기로 나아간다.
앞에서 히든 노드 수를 늘려도 근사하게 따라갈 수 있다는 universal approximation theorem에 대해서 배웠었다. 그럼 히든 레이어를 늘리는 것과 히든 레이어의 노드 수를 늘리는 것의 차이는 무엇이고 뭐가 더 좋을까?
더보기
=> 하나의 히든 레이어에 노드 수를 많이 두는 것은 근사하게 따라갈 수 있으나 너무 비효율적이다. 따라서 히든 레이어의 수를 더 쌓는 것이 효율적이고 일반화적인 성능을 보여준다!
DNN의 장점에 대해 알아보자
● 간단한 표현을 통해 일반화 성능을 향상
● 비선형적 데이터 문제 해결 가능
● 깊이의 증가 = Layer 증가 => Test Accuracy가 향상
● 일정 층 이상에서는 성능 향상이 정체
DNN의 단점에 대해서도 알아보자
Q. 히든 레이어를 계속 쌓았는데 왜 학습이 잘 안되는가?
더보기
A. 레이어를 많이 쌓을 수록 학습률을 곱해준 웨이트 값이 0에 수렴할 정도로 작아져 영향력이 너무 작아지거나 없는 경우가 발생한다.
ex) 미분 값이 제일 커도 0.25보다 작다. 따라서 이 값들을 계속 곱해주면 앞부분 layer의 Gradient는 0에 가까워진다.
=> 역전파에서 역전파 수정이 거의 안되는 경우가 생긴다. 즉 앞쪽 레이어의 웨이트 로스에 거의 영향을 미치지 못한다. 반대로 웨이트가 너무 커져도 문제가 된다. 이를 기울기 손실이라고 하는데 이 문제를 해결하기 위해서 ReLu를 활성화 함수로 사용한다
이외에도 많은 문제가 있다
● 모델의 복잡도가 너무 커져 overfitting 가능성이 있다.
※ 해결 방법
이를 해결하기 위해 Dropout을 사용하여 일부 노드의 연결을 끊어 순전파, 역전파 과정에 사용하지 않는다. 드롭아웃과 같이 규제 방법으로 parameter sharing(동일 가중치를 여러 위치 또는 연산에 사용), Sparse connection(동일한 가중치를 여러 위치 또는 연산에서 사용)이 있다. 또 이를 해결하기 위해 일반화 성능을 높여주는 데이터 어그멘테이션 기법을 사용한다.
● 반복 횟수가 너무 많아서 최적화하는데 속도가 느려진다
※ 해결 방법
데이터의 일부를 사용하는 경사 하강법인 SGD를 사용한다. 이 방법은 랜덤하게 데이터의 일부를 사용해서 연산량을 줄여준다. 조금 부정확하지만 한번한번 빠른 속도로 나아간다!
SGD 외에도 추가적인 옵티마이저들이 많다. 그 중 momentum에 대해서 설명하겠다
더보기
=> 이전에 봤던 SGD에 관성을 도입하였다(원래 가던 방향 + SGD시 가는 방향). 만약 최적의 포인트에 도달하지 못하고 헤매면 학습률을 높이고, 수렴해간다면 학습률을 줄여 세밀하게 도달할 수 있게끔 한다. 따라서 step 방향과 크기를 잘 조절해야한다!
(파란색 : SGD , 분홍색 : Momentum , 초록색 : Adam)
네트워크를 어떻게 나타내는지 한번 보자
함수 y가 데이터의 input, output의 사이를 잘 approximation 해주면 된다. 신경망은 체인 형태의 함수이고 체인의 길이(layer의 수)가 네트워크의 깊이다
각 층의 특징들을 한번 보자
● 입력층, 출력층은 명확한 역할이 있지만 은닉층은 명시되지 않는다(output, activation function...)
● 학습 알고리즘은 히든 레이어들이 목표 함수에 가장 근사하도록 최적의 가중치와 변환 방식을 찾는다
아무래도 다른 층보단 히든 레이어가 조금 더 내용이 많고 중요한 것 같다. 좀 더 알아보도록 하자
Hidden unit들에 대해 알아보자
● hidden layer에 가장 default로 쓸 수 있는 activation function이 ReLu다
● sigmoid의 중심이 0이 아니라서 문제가 생겨 나온게 hyperbolic 탄젠트인데 이 또한 기울기가 0인 곳이 많아서 결국엔 ReLu를 사용한다
=> 하지만 ReLu는 가중합이 음수의 입력은 0이 되어 무시하므로 이런 weight들이 학습되지 않는다. 따라서 이른 보완하기 위해 Leaky ReLu를 사용한다. ReLu는 기울기를 최소한 손실시키지는 않았지만 activation이 음수일 때 0이기 때문에 학습이 되지 않는다
ReLu가 상당히 자주 쓰이는 것 같다. 조금 더 자세히 알아보자
● 선형 연산에 가까워 계산 비용이 적다
● 초기엔 대부분 활성화 되어 있다
● 양수일 때는 기울기가 크고 활성화되어있지만 음수일 때는 기울기가 0이라 activation이 없으므로 학습 중단이 가능하다
Generalized ReLu
● ReLu를 일반화하여 음수 영역에서도 기울기를 가진다
● 알파는 학습이 가능하지만 학습 가능한 파라미터가 추가되므로 비용이 증가한다
● 여러 선형 함수 중 최댓값을 선택한다
Maxout units
● 각 노드가 k개의 선형 함수 중 최댓값을 선택한다
● 여러 비선형 활성화 함수를 일반화 한 형태이다
ex) k = 4일 때 4개의 선형 함수로 다중 영역을 학습 가능하다. 여러 선형 노드의 출력을 비교하여 최댓값을 출력한다
활성화 함수들에 대해 전체적으로 한번 보자
Leaky ReLu는 알파 값을 상당히 작은 값으로 둔다. 알파도 gradient 계산에서 학습하는 값으로 둔다. 이 점은 알파를 구하기 쉽다는 ReLu의 장점을 잃어버리게 된다. 결국 ReLu는 선형함수의 최댓값을 뽑아내는 함수이고 이를 일반화 한 것이 Maxout, ReLu의 장점을 잃어버리더라도 여러 영역을 잘 나타내준다
그렇다면 왜 sigmoid랑 hyperbolic은 잘 사용하지 않을까?
● solution 문제 발생한다. 대부분의 범위에서 출력 값이 상수에 가까운 형태이기 때문에 역전파 계산 과정에 Gradient가 0에 수렴하므로 가중치가 업데이트 되지 않는다
● 입력 값에 대해 sensitive하지 않다
다음 시간엔 kernel method에 대해 알아보도록 하자
'AI > MachineLearning' 카테고리의 다른 글
[ML] Neural Networks (3) | 2024.12.07 |
---|---|
[ML] Ensemble method (0) | 2024.12.07 |
[ML] Decision Tree (0) | 2024.11.07 |
[ML] Nearest Neighbor Method (0) | 2024.11.06 |
[ML] Logistic Regression (0) | 2024.11.06 |