티스토리 뷰

2020/10/19 - [Study/인공지능] - Affine층 역전파 ( 인공지능 기초 #12 )

 

심층신경망에서 층을 깊게 쌓으면 몇가지 심각한 문제가 발생하는데,  그러한 문제를 어떻게 해결할지 해결하지 못한다면 어떻게 억제할 지 공부해봅니다.

 

Optimizer : 어떻게 하면 산을 잘 타고 내려갈까? [경사하강법]

 

손실함수는 낮으면 낮을수록 좋습니다. (손실함수 = 크로스 엔트로피)

 

크로스 엔트로피의 변수는 가중치와 편향 입니다. MNIST 기준 39760 개입니다. 

 

39760개의 연립방정식을 푸는것은 말이 안되기 때문에, 경사하강법을 이용해 최소가 되는 지점을 찾아갑니다.

2020/10/19 - [Study/인공지능] - 경사하강법 (인공지능 기초 #9)

 

경사하강법 (인공지능 기초 #9)

손실함수는 패널티 점수여서 어떤 네트워크의 손실함수 값이 크다는 것은 뉴럴 네트워크의 성능이 안좋다는 이야기이고 값이 작다는것은 뉴럴 네트워크의 성능이 좋다는 이야기라는것을 이전

15051015.tistory.com

 

Gradient Descent

 

다변수 미분 이론에 바탕을 둔 가장 기본이 되는 Optimizer입니다.

 

다변수 함수가 주어져 있을 때, 어느 지점에서 함수가 가장 빨리 증가하는 방향은 그레디언트 방향이고, 가장 빨리 감소하는 방향은 그레디언트의 반대 방향 입니다.

 

SGD의 점화식

점화식이 의미하는 바는

한걸음 나아간 좌표 = 기존 좌표 - 러닝레이트 * 그레디언트에 적용한 좌표

 

라는 의미입니다.

class SGD:

    """확률적 경사 하강법(Stochastic Gradient Descent)"""

    def __init__(self, lr=0.01):
        self.lr = lr
        
    def update(self, params, grads): #params : 가중치와 편향 grads : 그레디언트
        for key in params.keys(): #params 가 딕셔너리 형태로 되어있다. key 에 x와 y, value에 각 좌표 값이 들어있다
            params[key] -= self.lr * grads[key] 

코드는 위와 같습니다.

 

러닝메이트 0.5, 원점에서 출발 했을 때, 그레디언트 값이 4,-8일때 한걸음 간 값은 = -2,4 라는 의미이다.

 

update == 가중치과 편향을 바꿔나가면서 성능을 향상시켜나가는데 이를 업데이트 한다고 합니다.

 

 

이는 전에 공부한 경사하강법과 동일한 방법입니다. 이전에 경사하강법에는 최소점이 아닌 극소점 또는 수평적인 점에서 안착할 수 있는 문제점이 있다는 것을 알아보았습니다. 

 

또한 다변수함수가 모여있을 때 등위선같은 모양을 볼 수 있는것을 이전에 알아봤는데, 등위선과 그레디언트는 항상 수직입니다. 그로인해 원점을 향해 나아갈 때 지그재그로 움직이게 됩니다.

Gradient Descent는 진동현상을 겪으며 매우 비효율적으로 움직이게 됩니다.

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
250x250