딥러닝에서 배워야 할 기본적인 개념은
Perception MLP
Weight Initialization
Forward Propagation
Cost Function
Back Propagation
Optimizer
와 같고, 여기서는 Weight Initialization의 개념과 Forward Propagation, Back Propagation을 배울것이다.
1. Weight Initialization
Linear Binary Classifier을 처음에 각 노드마다 식을 세운다. 각각의 식은 Perceptron인 f∑wnxn+b라는 식이고, 아래의 식에서 wn이 가중치이고 0과 1이 고정된 feature xn의 값이다. b는 추가되는 값이다. 0과 1을 넣었을 때 1이나오게 가중치를 조정하려면 아래와 같이 글니다.
이것을 도표로 표현하면 아래와 같다. 0에서 첫번째 노드로 가는 값에 가중치를 0은 -10을 곱하고, 1은 10을 곱해서 더한다. 그리고 나온 값에 목적지까지 -20을 곱해서 더하면 된다. 여기서 나온 값은 1혹은 0이다.
0 | 1 | 목적지 | ||
첫번째 노드 | -10 | 10 | -20 | |
두번째 노드 | 20 | -20 | 10 | |
세번째 노드 | 5 | -10 | -20 |
구체적으로 풀어보면 첫번째 노드를 지날 때에는 -10*0 + 1*10이 된다. 두 번째는 20*0 + -20*1이 되고, 세 번째는 5*0 + -10*1이 된다.
2. Forward Propagation
Perceptron하나는 입력값과 가중치를 곱해서 0이냐 1이냐를 정해준다. 여기서 들어오는 값이 0보다 크면 1이되라고 지정했다면, 각각의 노드의 출력값은 [1 0 0]이된다. 이렇게 입력값과 가중치를 곱해서 0에서 1의 출력값을 만들고 해당 값을 다시 넘겨주는 과정을 Forward Propagation이라고 한다.
특정 값 보다 이상일 때 1이라는 θ값도 컴퓨터가 랜덤으로 정해준다. 이 상태에서 목적지까지의 값을 곱한다. 다시 또 가중치를 갖게 된다. 3개의 가중치는 -20, 10, -20이 된다. 이것을 아래와 1 0 0으로 조금 전과 같이 곱하면 -20이 된다.
3. Back Propagation
가중치랑 Output을 곱해서 곱한다. Forward 상태로 입력에서부터 출력까지 앞으로 나간다. 결국 특정 Output이 나오면 내가 입력한 결과값과 데이터와 모델이 만든 값을 비교한다. 내 원래 데이터는 1인데 0이라고 예측했네? 가중치를 바꿔줘!!! Back하기 시작한다. 뒤로가면서 가중치를 업데이트 한다. wk = [10,-10,15]로 만든다. 해당 과정을 Back Propagation이라고 한다.
이 전부의 과정은 아래와 같다. 가중치 weight의 초기값을 설정한 뒤에, forward propagation으로 perceptron을 통과시켜서 값을 내놓은 뒤에 결과 값을 비교한 뒤에 다시 backward propagation이 일어나는 과정이다.
이 과정을 AND게이트로 다시 한 번 살펴보자. 여기서 θ를 컴퓨터가 0.5라고 설정했다면 식은 아래와 같다.
입력값(AND) | W1(0.7) | W2(0.4) | 합한 값 | Perceptron출력값 | 예측값 |
[0,0] | 0 | 0 | 0 | 0 | 0 |
[0,1] | 0 | 0.4 | 0.4 | 0 | 0 |
[1,0] | 0.7 | 0 | 0.7 | 1 | 0 |
[1,1] | 0.7 | 0.4 | 1.1 | 1 | 1 |
W와 X를 곱해서 ∑한 것이다. 특정한 함수를 통과하면 된다. θ를 컴퓨터가 0.5라고 설정했기 때문에, 여러 Function중에서 0.5이하면 전부 다 0이라고 하고, 0.5이상이면 1이라고 정한다. 그런데 기대값이 0 0 0 1이라면 0 0 1 1의 출력은 잘못된 결과값이다. 이 때 컴퓨터는 다시 뒤로 돌아가서 w값을 0.3으로 줄여볼까? update가 일어난다. 0.3이라면 전부 다 풀린다. 나름의 함수가 만들어진 것이 딥러닝이다.
4. Cost Function
여기서 결과값을 비교했을 때 얼마나 틀릴지를 결정하는 것이 Cost Function이라고 한다. 예측 값과 실제 값의 차이를 기반으로 모델의 정확도(성능)을 판단하기 위한 함수이고, loss function, error function, objective function의 세 종류가 있다.
어떤 것을 Cost Function으로 쓰느냐에 따라 완전히 달라진다. 차이가 나는 정도를 loss라고 한다. 얼마만큼 잃었다. 에러가 있다는 뜻이다. 이 차이값은 0에 가까우면 가까워질 수록 잘 맞추게 되고. 딥러닝은 에러 값을 최소로 만들기 위한 과정이다.
Cost Function을 수식으로 나타내면 아래와 같다.
J(w,b) = 1/n∑(h(x)) - yi)2 이고 xi인풋값을 weight를 곱한 뒤에 perceptron인 h(xi)를 통과시킨 뒤에 나온 결과값인 yi값을 뺀 뒤에 제곱한 값이다.
가중치가 변하는 것에 따라서 Cost를 그린다. Weight가 정점일 때 가장 낮은 값을 갖는다. 모델의 성능이 가장 좋다.
해당 점을 어떻게 찾는다? Gradient Descent 경사하강법을 통해 찾는다. 경사가 있을 때 아래쪽으로 하강한다고 해서 Gradient Descent라고 한다.
w가 함수가 나올 때 무슨 값을 비교해서 좌인지 우인지 갈까? 기울기를 살펴본다.기울기가 경사(Gradient)이다. 기울기가 -방향으로 간다. 술자리에 병뚜껑게임 같이 up&down한다.
5. Optimizer
어떻게 최적의 값을 찾는 것이 Optimizer라고 한다. Cost Function이 비교하는 것에서 나온다. 비교할 때의 기준이 Cost Function 함수이다.
Optimizer는 아래 그림과 같다. 기존 경사하강법(Gradient Descent)는 그냥 좌우의 값을 찾을 뿐인데, Optimizer는 여러군데 움직이면서 최적의 값을 찾아나가는 알고리즘이다.
Optimizer의 종류는 아래와 같고 각각의 움직이는 방향마다 다르다. 실제로 많이 쓰이는 것은 SGD와 Adam이다.
'프로그래밍 일반 > 딥러닝' 카테고리의 다른 글
[딥러닝] 케라스실습 02. XOR Function (0) | 2019.11.25 |
---|---|
[딥러닝] 케라스 실습 01. AND Function 문제 (0) | 2019.11.25 |
[딥러닝] 케라스의 기초 개념 (0) | 2019.11.25 |
[딥러닝] 3. 딥러닝시 주의할 점 (0) | 2019.11.25 |
[딥러닝] 01. 딥러닝 기초이론-MLP (0) | 2019.11.23 |