ch.6 학습 관련 기술들(1)

pasongtak·2024년 5월 15일

딥러닝

목록 보기
7/11

매개변수 갱신

매개변수의 최적값을 찾는 문제를 푸는 것을 최적화라고 한다.

확률적 경사 하강법(SGD)

최적의 매개변수 값을 찾는 단서로 매개변수의 기울기를 이용해, 기울어진 방향으로 매개변수 값을 갱신하는 일을 반복해 최적의 값에 다가가는 방법을 확률적 경사 하강법(SGD)라고 한다.

class SGD:
	def __init__(self, lr=0.01):
    	self.lr = lr
        
    def update(self, params, grads):
    	for key in params.keys():
        	params[key] -= self.lr * grads[key]

SGD 단점

  • SGD에 의한 최적화 갱신 경로

    SGD의 단점은 비등방성 함수에서 탐색 경로가 비효율적이라는 것이다. 비등방성 함수에서 SGD는 정확한 방향을 가리키지 못하고 기울어진 방향이 지그재그로 가리킨다.

모멘텀

모멘텀은 운동량을 뜻하는 단어이다.

class Momentum:
	def __init__(self, lr=0.01, momentum=0.9):
    	self.lr = lr
        self.momentum = momentum
        self.v = None
        
    def update(self, params, grads):
    	if self.v is None:
        	self.v = {}
            for key, val in params.items():
            	self.v[key] = np.zeros_like(val)
                
        for key in params.key():
        	self.v[key] = self.momenturm*self.v[key] - self.lr*grads[key]
            params[key] += self.v[key]

인스턴스 변수 v -> 물체의 속도

  • 모멘텀에 의한 최적화 갱신 경로

    SGD보다 x축 방향으로 빠르게 다가가 지그재그의 정도가 덜한 것을 볼 수 있다.

AdaGrad

신경망 학습에서 학습률이 너무 작으면 학습 시간이 너무 길어지고, 너무 크면 발산하여 학습이 제대로 이루어지지 않는다.

  • 학습률 감소는 처음에는 크게 학습하다가 조금씩 작게 학습하는 방법이다.
  • AdaGrad는 각각의 매개변수에 맞춤형 값을 만들어서 매개변수 전체의 학습률 값을 일괄적으로 낮춘다.
  • AdaGrad는 개별 매개변수에 적응적으로 학습률을 조정하면서 학습을 진행한다.

    매개변수의 원소 중에서 많이 움직인 원소는 학습률이 낮아진다. 즉 학습률 감소가 매개변수의 원소마다 다르게 적용된다.
 class AdaGrad:
 	def __init__(self, lr=0.01):
    	self.lr = lr
        self.h = None
        
    def update(self, params, grads):
    	if self.h is None:
        	self.h = {}
        for key, val in params.items():
        	self.h[key] = np.zeros_like(val)
            
    for key in params.keys():
    	self.h[key] += grads[key] * grads[key]
        params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)
  • AdaGrad에 의한 최적화 갱신 경로

Adam

모멘텀과 AdaGrad를 융합한 듯한 방법이다. 하이퍼파라미터의 편향 보정이 진행된다.

  • Adam에 의한 최적화 갱신 경로

갱신 방법 비교

문제마다 효율적으로 사용할 수 있는 기법이 있다. 일반적으로 SGD보다 다른 세 기법이 빠르게 학습한다.

가중치의 초깃값

가중치를 0으로 설정하면 안된다.

  • 가중치 매개변수의 값이 작아지도록 학습하는 방법이 가중치 감소이다. 가중치 값을 작게 하여 오버피팅이 일어나지 않게 한다.
  • 가중치를 0으로 설정하면 오차역전파법에서 모든 가중치의 값이 똑같이 갱신된다.
  • 가중치가 고르게 되어버리는 상황을 막으려면 초깃값을 무작위로 설정해야 한다.

은닉층의 활성화값 분포

  • 데이터가 0과 1에 치우쳐 분포하게 되면 역전파의 기울기 값이 점점 작아지다가 사라지는 것이 기울기 소실이다.
  • 활성화값들이 치우치면 표현력을 제한한다는 관점에서 문제가 생긴다.
  • Xavier 초깃값을 사용하면 앞 층에 노드가 많을수록 대상 노드의 초깃값으로 설정하는 가중치가 좁게 퍼진다.

ReLU를 사용할 때 가중치 초깃값

  • ReLU를 이용할 때는 ReLU에 특화된 초깃값인 He 초깃값을 이용한다.
  • He 초깃값은 앞 계층의 노드가 n개일 때, 표준편차가 2/n\sqrt{2/n}인 정규분포를 사용한다.
  • 활성화 함수로 ReLU를 사용할 때는 He 초깃값을 sigmoid나 tanh 등의 s자 모양 곡선일 때는 Xavier 초깃값을 쓴다.

MNIST 데이터셋으로 본 가중치 초깃값 비교

  • 층별 뉴런 수가 100개인 5층 신경망에서 활성화 함수로 ReLU를 사용했다.
  • std = 0.01 일 때는 학습이 전혀 이뤄지지 않고, Xavier와 He 초깃값은 학습이 순조롭게 이뤄지고 있다. 학습 진도는 He 초깃값이 더 빠르다.

초깃값은 신경망 학습에 아주 중요한 포인트이다!

0개의 댓글