검수요청.png검수요청.png

"순전파"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
잔글 (같이 보기)
 
(다른 사용자 한 명의 중간 판 5개는 보이지 않습니다)
22번째 줄: 22번째 줄:
 
각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉층 뉴런의 시그모이드 함수의 입력값이 된다. <math>z1</math>과 <math>z2</math>는 [[시그모이드 함수]]의 입력으로 사용되는 각각의 값에 해당된다.
 
각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉층 뉴런의 시그모이드 함수의 입력값이 된다. <math>z1</math>과 <math>z2</math>는 [[시그모이드 함수]]의 입력으로 사용되는 각각의 값에 해당된다.
  
<math>z1</math>=<math>W1</math><math>x1</math>+<math>W2</math><math>x2</math>=0.3×0.1+0.25×0.2=0.08
+
<math>z_1 = W_1x_1 + W_2x_ 2= 0.3\times0.1 + 0.25\times0.2 = 0.08</math>
 +
 
 +
<math>z_2 = W_3x_1 + W_4x_2 = 0.4\times0.1 + 0.35\times0.2 = 0.11</math>
  
<math>z2</math>=<math>W3</math><math>x1</math>+<math>W4</math><math>x2</math>=0.4×0.1+0.35×0.2=0.11
 
  
 
<math>z1</math>과 <math>z2</math>는 각각의 은닉층 뉴런에서 시그모이드 함수를 지나게 되는데 시그모이드 함수가 리턴하는 결과값은 은닉층 뉴런의 최종 출력값이다. 식에서는 각각 <math>h1</math>과 <math>h2</math>에 해당되며, 아래의 결과와 같다.
 
<math>z1</math>과 <math>z2</math>는 각각의 은닉층 뉴런에서 시그모이드 함수를 지나게 되는데 시그모이드 함수가 리턴하는 결과값은 은닉층 뉴런의 최종 출력값이다. 식에서는 각각 <math>h1</math>과 <math>h2</math>에 해당되며, 아래의 결과와 같다.
  
<math>h1</math>=<math>sigmoid(z1)</math>=0.51998934
+
<math>h1</math>=<math>sigmoid(z1)</math>='''0.51998934'''
  
<math>h2</math>=<math>sigmoid(z2)</math>=0.52747230
+
<math>h2</math>=<math>sigmoid(z2)</math>='''0.52747230'''
  
 
<math>h1</math>과 <math>h2</math> 이 두 값은 다시 출력층의 뉴런으로 향하게 되는데 이때 다시 각각의 값에 해당되는 가중치와 곱해지고, 다시 가중합 되어 출력층 뉴런의 시그모이드 함수의 입력값이 된다. 식에서는 각각 <math>z3</math>과 <math>z4</math>에 해당된다.
 
<math>h1</math>과 <math>h2</math> 이 두 값은 다시 출력층의 뉴런으로 향하게 되는데 이때 다시 각각의 값에 해당되는 가중치와 곱해지고, 다시 가중합 되어 출력층 뉴런의 시그모이드 함수의 입력값이 된다. 식에서는 각각 <math>z3</math>과 <math>z4</math>에 해당된다.
  
<math>z3</math>=<math>W5</math><math>h1</math>+<math>W6</math><math>h2</math>=0.45×<math>h1</math>+0.<math>h2</math>=0.44498412
+
<math>z3</math>=<math>W5</math><math>h1</math> + <math>W6</math><math>h2</math>='''0.45'''×<math>h1</math>+'''0.4'''×<math>h2</math>='''0.44498412'''
  
<math>z4</math>=<math>W7</math><math>h1</math>+<math>W8</math><math>h2</math>=0.<math>h1</math>+0.<math>h2</math>=0.68047592
+
<math>z4</math>=<math>W7</math><math>h1</math>+<math>W8</math><math>h2</math>='''0.7'''×<math>h1</math>+'''0.6'''×<math>h2</math>='''0.68047592'''
  
 
<math>z3</math>과 <math>z4</math>이 출력층 뉴런에서 시그모이드 함수를 지난 값은 이 인공 신경망이 최종적으로 계산한 출력값이다. 실제값을 예측하기 위한 값으로서 예측값이라고도 부른다.
 
<math>z3</math>과 <math>z4</math>이 출력층 뉴런에서 시그모이드 함수를 지난 값은 이 인공 신경망이 최종적으로 계산한 출력값이다. 실제값을 예측하기 위한 값으로서 예측값이라고도 부른다.
  
<math>o1</math>=<math>sigmoid(z3)</math>=0.60944600
+
<math>o1</math>=<math>sigmoid(z3)</math>='''0.60944600'''
  
<math>o2</math>=<math>sigmoid(z4)</math>=0.66384491
+
<math>o2</math>=<math>sigmoid(z4)</math>='''0.66384491'''
  
 
이제 해야할 일은 예측값과 실제값의 오차를 계산하기 위한 오차 함수를 선택하는 것이다. 오차(Error)를 계산하기 위한 손실 함수(Loss function)로는 평균 제곱 오차 MSE를 사용한다. 식에서는 실제값을 target이라고 표현하였으며, 순전파를 통해 나온 예측값을 output으로 표현하였다. 그리고 각 오차를 모두 더하면 전체 오차<math>Etotal</math>가 된다.
 
이제 해야할 일은 예측값과 실제값의 오차를 계산하기 위한 오차 함수를 선택하는 것이다. 오차(Error)를 계산하기 위한 손실 함수(Loss function)로는 평균 제곱 오차 MSE를 사용한다. 식에서는 실제값을 target이라고 표현하였으며, 순전파를 통해 나온 예측값을 output으로 표현하였다. 그리고 각 오차를 모두 더하면 전체 오차<math>Etotal</math>가 된다.
  
<math>Eo1</math>=½(<math>targeto1</math>−<math>outputo1</math>)2=0.02193381
+
<math>Eo1</math>=<math>\frac{1}{2}</math>(<math>targeto1</math>−<math>outputo1</math>)'''2'''='''0.02193381'''
  
<math>Eo2</math>=½(<math>targeto2</math>−<math>outputo2</math>)2=0.00203809
+
<math>Eo2</math>=<math>\frac{1}{2}</math>(<math>targeto2</math>−<math>outputo2</math>)'''2'''='''0.00203809'''
  
<math>Etotal</math>=<math>Eo1</math>+<math>Eo2</math>=0.02397190
+
<math>Etotal</math>=<math>Eo1</math>+<math>Eo2</math>='''0.02397190'''
  
 
== 행렬의 곱셈을 이용한 순전파(Forward Propagation) ==
 
== 행렬의 곱셈을 이용한 순전파(Forward Propagation) ==
128번째 줄: 129번째 줄:
 
* [[인공지능]]
 
* [[인공지능]]
  
{{알고리즘|검토 필요}}
+
{{인공지능 기술|검토 필요}}

2020년 6월 29일 (월) 16:31 기준 최신판

순전파

순전파(Forward Propagation)는 딥러닝 인공지능 알고리즘에서 입력 데이터를 주고 여러 층의 신경망을 따라 쭉 신호를 전파하면서 최종 출력을 만들어 가는 과정을 말한다. 순방향 전파, 전진방향 전파라고도 한다.[1] 반대말은 역전파이다.

개요[편집]

인공지능 신경망 딥러닝의 구조
인공지능 딥러닝 알고리즘에서 순전파((Forward Propagation) 과정과 가중치 변수(W)들

순전파는 입력층에서 전달 되는 모든 값이 은닉층을 통해 출력층까지 전달되는 방식이다. 입력층 -> 은닉층 -> 출력층 순으로 순서대로 다음 층으로 이동. 순전파는 순서대로 진행되며 마지막에 결과 값이 나오기 때문에 결과를 이용해 가중치 조절을 할 수 없다.[2]

활성화 함수, 은닉층의 수, 각 은닉층의 뉴런 수 등 딥 러닝 모델을 설계하고나면 입력값은 입력층, 은닉층을 지나면서 각 층에서의 가중치와 함께 연산되며 출력층으로 향한다. 그리고 출력층에서 모든 연산을 마친 예측값이 나오게 된다. 이와 같이 입력층에서 출력층 방향으로 예측값의 연산이 진행되는 과정을 순전파라고 한다.

딥러닝 신경망은 여러 개의 층(Layer)으로 이루어져 있는데, 그 층 숫자가 증가할수록 성능과 정확성이 높아진다. 그래서 "깊다"라는 의미를 가진 '딥'(Deep)이라는 표현이 나온다. 다른 말로 딥러닝을 심층학습(深層學習)이라고 부르기도 한다. 다량의 데이터나 복잡한 자료들 속에서 핵심적인 내용 또는 기능을 추출해내는 기계학습(Machine Learning) 알고리즘의 일종이다.

딥러닝에는 입력층(Input layer)과 출력층(Output layer) 사이에 여러 개의 은닉층(Hidden layer)들로 이루어져 있다. 이 딥러닝은 복잡한 비선형 관계(Non-linear relationship)들을 모델링할 수 있다.

뇌의 동작은 비선형적이기 때문이다. 이 딥러닝 알고리즘에는 각 층에 설치된 수천 혹은 수천 만개의 신경세포(Node)가 서로 연결망의 선으로 연결되어 있다. 그리고 이 연결망을 통해서 각 층을 지나면서 출력이 전달될 때, 가중치(w, weight)가 곱해진다. 이때 각 신경세포(Node)에서 입력 값이 합해지게 되는데, 그 합이 일정 값이 넘으면 다음 단계로 출력으로 전달된다. 그래서 딥러닝 신경망에는 수많은 변수(Parameters)가 존재한다. 이러한 변수들은 인공지능이 빅데이터를 이용해 학습하면서 정해간다. 다름 아니라 이 변수들을 정해가는 과정을 학습이라고 한다.

이 학습과정에서 최종 출력 값인 결과와 미리 정해진 정답과 비교하면서 변수를 학습해 간다. 예를 들어 인공지능이 사진을 판독한다면, 입력이 사진이고 최종 출력이 판독이다. 사진을 넣어 주면서 결과를 뽑아 호랑이인지 고양이 인지 판정하게 되는데, 이 과정을 전진방향 전파 학습(Forward Propagation) 이라고 한다. 이 결과에 오차가 생겼을 때, 그 결과의 차이를 보고, 다시 꺼꾸로 변수를 정해가는 과정을 역방향 전파 학습(Back Propagation) 이라고 한다. 이처럼 결과 오류의 차이를 이용해 변수를 정해서 전해간다. 이렇게 답을 알려주면서 학습하는 방법을 지도학습(Supervised Learning) 이라 한다.[3]

순전파 계산[편집]

순전파 계산

주어진 값이 오른쪽 그림과 같을 때 순전파를 진행해보면 그림에서 소수점 앞의 0은 생략하였다. 예를 들어 .25는 0.25를 의미한다. 파란색 숫자는 입력값을 의미하며, 빨간색 숫자는 각 가중치의 값을 의미한다. 아래 진행하는 계산의 결과값은 소수점 아래 여덟번째 자리까지 반올림하여 표기한다.

각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉층 뉴런의 시그모이드 함수의 입력값이 된다. 시그모이드 함수의 입력으로 사용되는 각각의 값에 해당된다.


는 각각의 은닉층 뉴런에서 시그모이드 함수를 지나게 되는데 시그모이드 함수가 리턴하는 결과값은 은닉층 뉴런의 최종 출력값이다. 식에서는 각각 에 해당되며, 아래의 결과와 같다.

==0.51998934

==0.52747230

이 두 값은 다시 출력층의 뉴런으로 향하게 되는데 이때 다시 각각의 값에 해당되는 가중치와 곱해지고, 다시 가중합 되어 출력층 뉴런의 시그모이드 함수의 입력값이 된다. 식에서는 각각 에 해당된다.

= + =0.45×+0.4×=0.44498412

=+=0.7×+0.6×=0.68047592

이 출력층 뉴런에서 시그모이드 함수를 지난 값은 이 인공 신경망이 최종적으로 계산한 출력값이다. 실제값을 예측하기 위한 값으로서 예측값이라고도 부른다.

==0.60944600

==0.66384491

이제 해야할 일은 예측값과 실제값의 오차를 계산하기 위한 오차 함수를 선택하는 것이다. 오차(Error)를 계산하기 위한 손실 함수(Loss function)로는 평균 제곱 오차 MSE를 사용한다. 식에서는 실제값을 target이라고 표현하였으며, 순전파를 통해 나온 예측값을 output으로 표현하였다. 그리고 각 오차를 모두 더하면 전체 오차가 된다.

=()2=0.02193381

=()2=0.00203809

=+=0.02397190

행렬의 곱셈을 이용한 순전파(Forward Propagation)[편집]

그림과 같은 인공 신경망이 있다고 할 때 주어진 인공 신경망을 케라스로 구현해본다면 아래와 같이 짧은 코드로 구현할 수 있다.

인공 신경망
from keras.models import Sequential
from keras.layers import Dense
model = Sequential() # 층을 추가할 준비
model.add(Dense(8, input_dim=4, init='uniform', activation='relu'))
# 입력층(4)과 다음 은닉층(8) 그리고 은닉층의 활성화 함수는 relu
model.add(Dense(8, activation='relu')) # 은닉층(8)의 활성화 함수는 relu
model.add(Dense(3, activation='softmax')) # 출력층(3)의 활성화 함수는 softmax

위의 코드의 주석에서 ( ) 괄호 안의 값은 각 층에서의 뉴런의 수를 의미하며 입력층부터 출력층까지 순차적으로 인공 신경망의 층을 한 층씩 추가하였다. 케라스를 사용하면 이렇게 간단하게 딥 러닝 모델을 구현할 수 있다.

인공 신경망에서 입력층에서 출력층 방향으로 연산을 진행하는 과정을 순전파(Forward Propagation)라고 한다. 다르게 말하면 주어진 입력으로부터 예측값을 계산하는 과정을 순전파라고 한다.

1) layer 1의 행렬 크기 추정하기

우선 각 층을 기준으로 입력과 출력의 개수를 정리하면 다음과 같다.

  • 입력층 : 4개의 입력과 8개의 출력
  • 은닉층1 : 8개의 입력과 8개의 출력
  • 은닉층2 : 8개의 입력과 3개의 출력
  • 출력층 : 3개의 입력과 3개의 출력

여기서는 편의상 입력층을 layer 0, 은닉층 1을 layer 1, 은닉층 2를 layer 2, 출력층을 layer 3라고 한다. 이제 위의 정보를 가지고 층마다 생기는 가중치와 편향 행렬의 크기를 추정해본다. 벡터와 행렬 연산 챕터에서 언급하였듯이 가중치 행렬에 입력 행렬을 곱하는 경우와 입력 행렬에 가중치 행렬을 곱하는 경우가 있겠으나, 여기서는 후자를 가정한다. 또한 배치 크기는 1로 하며 이 경우 layer 1에서 처음 입력으로 들어오는 입력 행렬 의 크기는 1 × 4로 행벡터에 해당된다. (만약 미니 배치 학습을 가정할 경우,의 크기는 배치의 크기 × 4가 된다.)

입력 행렬, 가중치 행렬, 편향 행렬, 출력 행렬은 다음과 같은 크기 관계를 가진다.

Xm×n×Wn×j +Bm×j=Ym× j

layer 1의 입력 행렬 의 크기는 1 × 4이다. layer 1의 출력은 8개이므로, 그에 따라 출력 행렬 Y의 크기는 1 × 8이 된다.

X1 × 4×Wn × j+Bm × j=Y1 × 8

그런데 가중치 행렬 W의 행은 입력 행렬 X의 열과 같아야 하므로 아래와 같다.

X1 × 4×W4 × j+Bm × j=Y1 × 8

편향 행렬 B는 출력 행렬 Y의 크기에 영향을 주지 않으므로 편향 행렬 B의 크기는 출력 행렬 Y의 크기와 같다.

X1 × 4×W4 × j+B1 × 8=Y1 × 8

가중치 행렬 W의 열은 출력 행렬 Y의 열과 동일해야 한다.

X1 × 4×W4 × 8+B1 × 8=Y1 × 8

layer 1의 가중치 행렬과 편향 행렬의 크기를 구했습다. 이제 layer 1의 출력 행렬 Y는 layer 2에서는 입력 행렬 X가 된다.

2) layer 2와 layer 3의 행렬 크기 추정하기

이를 반복하면 layer 2와 layer 3에서의 가중치 행렬과 편향 행렬의 크기를 구할 수 있다. 비록 은닉층과 출력층에 활성화 함수가 존재하지만 활성화 함수는 행렬의 크기에 영향을 주지 않는다.

layer 2 : X1 × 8×W8 × 8+B1 × 8=Y1 × 8

layer 3 : X1 × 8×W8 × 3+B1 × 3=Y1 × 3

인공 신경망이 입력층에서 은닉층을 지나 출력층에서 예측값을 계산하기까지의 과정을 행렬 연산으로 가정하고 행렬의 크기를 추정해보았다. 이와 같이 순전파를 진행하고 예측값을 구하고나서 이 다음에 인공 신경망이 해야할 일은 예측값과 실제값으로부터 오차를 계산하고, 오차로부터 가중치와 편향을 업데이트하는 일이다. 즉, 인공 신경망의 학습 단계에 해당된다. 이때 인공 신경망은 순전파와는 반대 방향으로 연산을 진행하며 가중치를 업데이트하는데, 이 과정을 역전파(BackPropagation)라고 한다.[4]

동영상[편집]

행렬을 통한 인공 신경망의 순전파 과정을 보여주는 영상이다. 아래의 영상에서는 3개의 데이터를 한 꺼번에 연산하며 입력 행렬 X의 행이 3이 되는 것이다. 하지만 행렬의 크기가 결정되는 원리는 달라지지 않는다.

각주[편집]

  1. 김정호 카이스트 교수, 〈[김정호의 4차혁명 오딧세이 인공지능은 타임머신을 탈 수 있다]〉, 《뉴스핌》, 2019-03-18
  2. Gilly, 〈순전파 & 역전파〉, 《네이버블로그》, 2018-10-29
  3. 김정호 카이스트 교수, 〈[김정호의 4차혁명 오딧세이 설명 불가능한 인공지능 작동 원리의 비밀]〉, 《뉴스핌》, 2019-01-07
  4.  〈2) 인공 신경망(Artificial Neural Network) 훑어보기 - 딥 러닝을 이용한 자연어 처리 입문〉, wikidocs, 2019-10-06

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 순전파 문서는 인공지능 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.