[PyTorch] 딥러닝 입문 – 인공 신경망 ANN 이해하기 ❷

이 글은    [Must Have] 텐초의 파이토치 딥러닝 특강   에서 발췌했습니다.

골든래빗 출판
이종민(텐초) 지음

딥러닝(Deep Learning)이 무엇인지, 어떤 기법이 있는지 알아보고 나서 파이토치(PyTorch) 기본 코딩 스타일을 알아봅니다. 이어서 딥러닝을 수행하는 프로세스와 최소한의 통계 지식, 시각화 기법을 알아봅니다. 빠르게 딥러닝을 알아가는 시간이 될 겁니다.

딥러닝 입문은 총 3개 장입니다. 1장에서 딥러닝 한눈에 살펴보기, 2장에서 인공 신경망 ANN 이해하기, 3장에서 간단한 신경망 만들기를 학습합니다.

인공 신경망 ANN 이해하기 ❷

인공 신경망을 이용한 딥러닝 기초 지식을 설명합니다. 먼저 인공 신경망이 어떻게 동작하는지, 어떻게 발전해왔는지 알아봅시다. 그다음은 신경망끼리 비교해 어떤 신경망이 더 좋은 성능을 갖고 있는지 성능을 비교하는 방법을 알아봅시다. 마지막으로 인공지능이 어떤 방식으로 학습하는지를 알아보겠습니다.

2장 인공 신경망 ANN 이해하기는 총 3편입니다.

 

3. 인공 신경망의 학습 확인해보기

이번에는 인공 신경망이 어떻게 학습하는지, 데이터를 0과 1로 분류하는 신경망을 구성해 알아보겠습니다. 약간의 수식이 나오지만 고등 수학 수준이므로 집중만 하면 이해하는 데 문제가 없을 겁니다.

입력층에서 다음과 같이 x1과 x2를 입력받는 신경망이라고 가정하겠습니다.

 

▼ 실습에 사용할 데이터

 

다음과 같이 입력층, 은닉층, 출력층, 가중치와 편향을 가지는 신경망을 임의로 만들어보았습니다.

 

 

은닉층과 출력층의 뉴런은 아래 공식을 이용해 출력값을 계산합니다.

 

 

모든 단계에서 활성화 함수는 0 이상이면 1을 출력하고, 0보다 작다면 0을 출력하는 이진분류 함수를 이용하겠습니다.

 

 

먼저 은닉층의 값을 구하겠습니다.

이 계산식을 이용해서 첫 번째 입력값(x1, x2)으로 은닉층값(a1과 *a2)*을 계산하겠습니다.

 

 

이렇게 모든 연산에 적용하면 a1a2 값은 다음과 같습니다.

 

 

출력값을 구하는 공식은 다음과 같습니다.

 

 

여기서 w5과 w6는 그림에서 -11로 나와 있습니다.

 

💡Note: 출력층은 출력값을 내보내는 층이기 때문에 구조적으로는 은닉층과 동일합니다. 그래서 똑같이 가중치와 편향이 존재합니다. 활성화 함수는 사용자 임의대로 사용하는 함수라서 이번 예제에서는 굳이 수식이 필요하지 않은 매우 간단한 함수를 이용했습니다.

 

이 식에 첫 번째 은닉층값을 적용하면 다음과 같습니다.

 

 

모든 값에 대한 결과는 다음과 같습니다.

 

 

y’는 신경망의 출력입니다. 정답인 y와 비교하면 값이 일치하는 것을 알 수 있습니다. 따라서 신경망이 제대로 데이터를 분류한 겁니다. 이렇게 신경망에 제대로 된 가중치를 준다면 복잡한 형태의 데이터 분포 역시 해결할 수 있습니다. 그렇다면 복잡한 데이터를 분류하는 데 사용할 가중치와 편향을 어떻게 찾을 수 있을까요?

 

4. 손실 함수로 올바른 가중치 찾기

이번 절에서는 제대로 된 가중치를 찾는 방법을 알아보겠습니다. 다음 그림에서 두 직선(결정 경계) 모두 입력 데이터를 분류할 수 있습니다. 어떤 선이 더 잘 분류한 걸까요?

 

▼ 두 결정 경계의 비교

 

어떤 직선이 나은 결정 경계인지를 알 수 있는 지표가 있을 겁니다. 예를 들어 하나의 점으로부터 직선까지의 거리를 오차라고 가정했을 때, 이 오차의 제곱의 평균이 작을수록 데이터를 잘 분류했다고 할 수 있습니다. 이렇게 오차를 구하는 함수를 오차 함수 혹은 손실 함수(Loss Function)라고 하며, 손실 함수의 값이 결정 경계의 성능을 간접적으로 나타냅니다.

 

▼ 결정 경계까지의 거리(오차)

 

즉 가장 좋은 결정 경계는 오차가 가장 적은 결정 경계라고 정의하는 겁니다. 대표적인 손실 함수는 평균 제곱 오차, 크로스 엔트로피 오차 등이 존재하며 상황에 맞게 사용해야 합니다.

 

▼ 대표적인 손실 함수

 

5. 경사 하강법과 오차 역전파로 최적의 값 찾기

다층 신경망은 단층 신경망이 분류하지 못하는 데이터의 분포도 분류할 수 있습니다. 그러나 데이터 분포가 복잡해지면 은닉층 깊이를 늘리거나, 은닉층의 뉴런 개수를 늘리게 되는데, 그러면 은닉층마다 데이터를 구분해내는 데 사용할 가중치를 구하기 어려워집니다. 손실 함수는 독립변수가 신경망의 가중치와 편향인 함수이며, 최적의 직선을 찾으려면 오차가 가장 적은 최적화된 가중치와 편향을 찾아야 합니다. 최적의 직선을 찾는다는 말은 결국 방정식을 푼다는 의미고, 가중치와 편향이 늘어날수록 풀어야 하는 방정식의 복잡도는 기하급수적으로 증가하기 때문에 어려워지는 겁니다. 따라서 최적의 직선을 찾는 새로운 방법이 필요합니다. 경사 하강법과 오차 역전파를 이용해 해결할 수 있습니다. 이 둘을 이용해 최적의 값을 찾는 방법을 설명하면서 약간의 수식이 등장합니다. 역시나 중학 수학 수준이므로 집중만 하면 이해하는 데 문제가 없을 겁니다.

다음은 앞에서 사용한 다층 신경망입니다.

 

▼ 이전 예제에서 사용한 다층 신경망

 

여기서 뉴런의 출력이 계산되는 부분을 자세히 봅시다.

 

 

위 식을 행렬로 나타내면 다음과 같이 나타낼 수 있습니다. 가중치와 편향을 바꿀 수 있게 변수로 바꿔주면 다음과 같이 쓸 수 있습니다.

 

 

위 식에서 알 수 있듯이 뉴런의 출력은 가중치와 편향에 대한 함수입니다. 그렇다면 a1과 a2를 이용해 이 신경망의 출력을 표현해보겠습니다.

 

 

이제 신경망의 출력값을 구했기 때문에 손실을 계산할 수 있습니다. 손실 함수는 L로, 신경망의 예측값은 y, 실젯값을 y′로 나타내겠습니다.

 

 

5.1 경사 하강법

이제 손실을 줄이는 방향으로 가중치를 변경해 나가야 합니다. 경사 하강법이라는 알고리즘을 이용하겠습니다. 경사 하강법은 손실 함수를 미분해서 손실 함수의 경사면을 따라 조금씩 이동해나간다고 해서 붙여진 이름입니다. 기울기의 반대 방향으로, 즉 기울기 값에 -1을 곱한 값만큼 변수의 값을 이동시키면서 최솟값에 조금씩 다가가는 알고리즘입니다.

 

💡경사 하강법(gradient descent): 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 최솟값에 이를 때까지 반복시키는 학습 방법

 

경사 하강법에서는 시작점으로부터 어느 정도 이동할지를 손실 함수의 기울기와 학습률(Learning Rate)로 결정합니다. 시작점의 기울기를 알아내려면 손실 함수를 미분해야 합니다. 기울기가 음의 기울기라면 가중치가 양의 방향으로 이동해야 한다는 뜻이고, 기울기가 양의 기울기라면 가중치가 음의 방향으로 이동해야 한다는 뜻입니다.

 

▼ 경사 하강법

 

이때 가중치는 시작점으로부터 기울기 크기만큼 이동하게 되는데, 학습률을 이용해 더 많이 이동하거나 더 적게 이동할 수 있습니다. 이것을 수식으로 나타내면 다음과 같습니다.

 

 

여기서 y는 가중치에 관한 함수라는 것을 주의해주세요. 위 수식의 α가 학습률입니다. w′은 가중치의 새로운 값을 의미합니다. 이때 학습률과 기울기를 곱하면 가중치가 변하는 크기를 나타내는 보폭이 됩니다.

 

💡학습률(learning rate)과 보폭(step size): 보폭은 학습률과 기울기의 곱으로 표현됩니다. 즉 기울기가 클수록 보폭도 커지고, 기울기가 작을수록 보폭도 작아집니다.

 

그럼 큰 학습률을 설정하면 빠르게 학습될까요? 학습률이 너무 크면 최솟값을 지나쳐버릴 가능성이 높습니다. 반대로 너무 작게 설정하면 최솟값에 도달하기까지 지나치게 많은 반복을 하게 되겠죠. 따라서 적절한 학습률을 설정해줘야 합니다. 어떤 값이 가장 좋을지는 알 수 없기 때문에 반복적으로 학습률을 바꿔가며 최적의 학습률을 찾아가야 합니다.

 

▼ 학습률 크기에 따른 수렴 속도

 

5.2 오차 역전파

앞에서 살펴본 수식은 하나의 가중치를 업데이트하는 수식이었습니다. 실제로는 수십만 개의 가중치가 있기 때문에 손실 함수를 사용해 일일이 가중치에 대해 미분해서 값을 수정하는 일은 어렵습니다. 그렇다면 어떻게 해야 할까요?

오차 역전파 알고리즘(Error Backpropagation)을 이용하면 해결할 수 있습니다. 오차 역전파 알고리즘은 신경망의 출력층으로부터 입력층까지 오차가 거슬러 전달됩니다. 정보의 방향이 순전파와 반대가 되므로 오차가 역전파한다라고 합니다. 오차 역전파에 경사하강법이 사용됩니다.

 

💡오차 역전파(error backpropagation): 정답과 신경망이 예측한 값과의 오차를 최소화하는 가중치를 찾는 알고리즘. 미분의 연쇄 법칙을 이용해 출력층에 가까운 가중치부터 수정해나간다.

 

▼ 미분의 연쇄 법칙을 이용하여 오차를 역전파!

 

가중치는 원래의 값에서 기울기만큼의 값을 뺀 새로운 값을 얻게 됩니다. 미분의 연쇄 법칙에 의해 층을 거칠수록 기울기가 누적되어 곱해지게 됩니다. 입력층에 가까운 가중치일수록 누적되는 기울기가 늘어나게 되며, 그렇게 입력층까지 기울기가 역전파되어 신경망의 모든 가중치를 수정해나가는 겁니다.

 

다음편에서 계속 됩니다.

책 내용 중 궁금한 점, 공부하다가 막힌 문제 등 개발 관련 질문이 있으시다면

언제나 열려있는 <[Must Have] 텐초의 파이토치 딥러닝 특강> 저자님의

카카오채널로 질문해주세요!

이종민(텐초) 

일본 JAIST 정보과학 석사. 동경의 딥러닝 엔지니어로 Ghelia에서 B2B 인공지능 솔루션을 개발 중이다. 딥러닝의 유용함을 널리 알리고자 유튜버로  활동하고 글을 쓰고 책을 집필합니다. 쉬운 그림을 이용해 10초만에 핵심을 전달하자는 의미에서 닉네임을 텐초로 지어 활동하고 있습니다.

– SNS : www.youtube.com/c/텐초

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내