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

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

해시넷
이동: 둘러보기, 검색
(새 문서: '''순전파'''(Forward Propagation)는 딥러닝 인공지능 알고리즘에서 입력 데이터를 주고 여러 층의 신경망을 따라 쭉 신호를 전파하면...)
 
잔글
4번째 줄: 4번째 줄:
 
순전파는 입력층에서 전달 되는 모든 값이 은닉층을 통해 출력층까지 전달되는 방식이다.  입력층 -> 은닉층 -> 출력층 순으로 순서대로 다음 층으로 이동. 순전파는 순서대로 진행되며 마지막에 결과 값이 나오기 때문에 결과를 이용해 가중치 조절을 할 수 없다.<ref>Gilly ・, 〈[https://blog.naver.com/giljaena7/221387200173 순전파 & 역전파]〉, 《네이버블로그》, 2018-10-29</ref>  
 
순전파는 입력층에서 전달 되는 모든 값이 은닉층을 통해 출력층까지 전달되는 방식이다.  입력층 -> 은닉층 -> 출력층 순으로 순서대로 다음 층으로 이동. 순전파는 순서대로 진행되며 마지막에 결과 값이 나오기 때문에 결과를 이용해 가중치 조절을 할 수 없다.<ref>Gilly ・, 〈[https://blog.naver.com/giljaena7/221387200173 순전파 & 역전파]〉, 《네이버블로그》, 2018-10-29</ref>  
  
 +
== 행렬의 곱셈을 이용한 순전파(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에서 처음 입력으로 들어오는 입력 행렬 X의 크기는 1 × 4로 행벡터에 해당된다. (만약 미니 배치 학습을 가정할 경우, X의 크기는 배치의 크기 × 4가 된다.)
 +
 +
입력 행렬, 가중치 행렬, 편향 행렬, 출력 행렬은 다음과 같은 크기 관계를 가진다.
 +
 +
Xm × n×Wn × j+Bm × j=Ym × j
 +
layer 1의 입력 행렬 X 의 크기는 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가 됩니다.
 +
 +
1) 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)라고 합니다. 인공 신경망의 이러한 학습 방법에 대해서는 다음 챕터에서 배웁니다.
 +
 +
== 동영상 ==
 +
행렬을 통한 인공 신경망의 순전파 과정을 보여주는 영상이다. 아래의 영상에서는 3개의 데이터를 한 꺼번에 연산하며 입력 행렬 X의 행이 3이 되는 것이다. 하지만 행렬의 크기가 결정되는 원리는 달라지지 않는다.
 +
<youtube>https://www.youtube.com/watch?v=UJwK6jAStmg</youtube>
  
 
{{알고리즘|검토 필요}}
 
{{알고리즘|검토 필요}}

2019년 10월 14일 (월) 14:13 판

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

개요

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

행렬의 곱셈을 이용한 순전파(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에서 처음 입력으로 들어오는 입력 행렬 X의 크기는 1 × 4로 행벡터에 해당된다. (만약 미니 배치 학습을 가정할 경우, X의 크기는 배치의 크기 × 4가 된다.)

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

Xm × n×Wn × j+Bm × j=Ym × j layer 1의 입력 행렬 X 의 크기는 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가 됩니다.

1) 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)라고 합니다. 인공 신경망의 이러한 학습 방법에 대해서는 다음 챕터에서 배웁니다.

동영상

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


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

  1. 김정호 카이스트 교수, 〈[김정호의 4차혁명 오딧세이 인공지능은 타임머신을 탈 수 있다]〉, 《뉴스핌》, 2019-03-18
  2. Gilly ・, 〈순전파 & 역전파〉, 《네이버블로그》, 2018-10-29