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

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

위키원
이동: 둘러보기, 검색
잔글 (개요)
잔글
2번째 줄: 2번째 줄:
  
 
== 개요 ==
 
== 개요 ==
[[파일:순전파.png|400픽셀|섬네일|오른쪽|순전파]]
+
[[파일:순전파.png|200픽셀|섬네일|오른쪽|순전파]]
 
순전파는 입력층에서 전달 되는 모든 값이 은닉층을 통해 출력층까지 전달되는 방식이다.  입력층 -> 은닉층 -> 출력층 순으로 순서대로 다음 층으로 이동. 순전파는 순서대로 진행되며 마지막에 결과 값이 나오기 때문에 결과를 이용해 가중치 조절을 할 수 없다.<ref>Gilly, 〈[https://blog.naver.com/giljaena7/221387200173 순전파 & 역전파]〉, 《네이버블로그》, 2018-10-29</ref>  
 
순전파는 입력층에서 전달 되는 모든 값이 은닉층을 통해 출력층까지 전달되는 방식이다.  입력층 -> 은닉층 -> 출력층 순으로 순서대로 다음 층으로 이동. 순전파는 순서대로 진행되며 마지막에 결과 값이 나오기 때문에 결과를 이용해 가중치 조절을 할 수 없다.<ref>Gilly, 〈[https://blog.naver.com/giljaena7/221387200173 순전파 & 역전파]〉, 《네이버블로그》, 2018-10-29</ref>  
  
 
활성화 함수, 은닉층의 수, 각 은닉층의 뉴런 수 등 딥 러닝 모델을 설계하고나면 입력값은 입력층, 은닉층을 지나면서 각 층에서의 가중치와 함께 연산되며 출력층으로 향한다. 그리고 출력층에서 모든 연산을 마친 예측값이 나오게 된다. 이와 같이 입력층에서 출력층 방향으로 예측값의 연산이 진행되는 과정을 순전파라고 한다.
 
활성화 함수, 은닉층의 수, 각 은닉층의 뉴런 수 등 딥 러닝 모델을 설계하고나면 입력값은 입력층, 은닉층을 지나면서 각 층에서의 가중치와 함께 연산되며 출력층으로 향한다. 그리고 출력층에서 모든 연산을 마친 예측값이 나오게 된다. 이와 같이 입력층에서 출력층 방향으로 예측값의 연산이 진행되는 과정을 순전파라고 한다.
  
[[파일:인공지능신경망.png|500픽셀|섬네일|오른쪽|인공지능 신경망 딥러닝의 구조]]
+
[[파일:인공지능신경망.png|300픽셀|섬네일|오른쪽|인공지능 신경망 딥러닝의 구조]]
  
[[파일:순전파과정.png|500픽셀|섬네일|오른쪽|인공지능 딥러닝 알고리즘에서 순전파((Forward Propagation) 과정과 가중치 변수(W)들]]
+
[[파일:순전파과정.png|300픽셀|섬네일|오른쪽|인공지능 딥러닝 알고리즘에서 순전파((Forward Propagation) 과정과 가중치 변수(W)들]]
  
 
딥러닝 신경망은 여러 개의 층(Layer)으로 이루어져 있는데, 그 층 숫자가 증가할수록 성능과 정확성이 높아진다. 그래서 "깊다"라는 의미를 가진 '딥'(Deep)이라는 표현이 나온다. 다른 말로 딥러닝을 심층학습(深層學習)이라고 부르기도 한다. 다량의 데이터나 복잡한 자료들 속에서 핵심적인 내용 또는 기능을 추출해내는 기계학습(Machine Learning) 알고리즘의 일종이다.
 
딥러닝 신경망은 여러 개의 층(Layer)으로 이루어져 있는데, 그 층 숫자가 증가할수록 성능과 정확성이 높아진다. 그래서 "깊다"라는 의미를 가진 '딥'(Deep)이라는 표현이 나온다. 다른 말로 딥러닝을 심층학습(深層學習)이라고 부르기도 한다. 다량의 데이터나 복잡한 자료들 속에서 핵심적인 내용 또는 기능을 추출해내는 기계학습(Machine Learning) 알고리즘의 일종이다.

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

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

개요

순전파

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

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

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

딥러닝 신경망은 여러 개의 층(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]

행렬의 곱셈을 이용한 순전파(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가 된다.

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