8000 DL(2) 작업중 · mioscode/mioscode.github.io@f86731e · GitHub
[go: up one dir, main page]

Skip to content

Commit f86731e

Browse files
author
somee.han
committed
DL(2) 작업중
1 parent 9e2720a commit f86731e

File tree

3 files changed

+112
-16
lines changed

3 files changed

+112
-16
lines changed

_posts/2019-11-21-DL(2)-mulit-layer-network-activate-function-loss-function.md

Lines changed: 112 additions & 16 deletions
10000
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ comments: true
4444
$y = ax$라는 선형함수가 있다고 한다면 이 것을 3층으로 구성하면 $y = a(a(a(x)))$ 와 동일한 것으로 이는 $y = a^3(x)$와 같다. 굳이 은닉층 없이 선형함수로 네트워크를 구성하는 것은 의미가 없다는 뜻이다.
4545
1.2.2.부터는 모두 비선형함수이다.
4646

47-
<center><img src="https://mioscode.github.io/assets/images/dl2/step_function.png" width="50%"></center>
47+
<center><img src="https://mioscode.github.io/assets/images/dl2/linear_function.png" width="50%"></center>
4848

4949
### 1.2.2. Binary Step Function (=Step Function)
5050
- 임계치를 기준으로 출력을 해준다.
@@ -63,6 +63,9 @@ $y = ax$라는 선형함수가 있다고 한다면 이 것을 3층으로 구성
6363

6464
$$s(t)=\frac{1}{1+e^{-t}}$$
6565

66+
($e^{-t}$ : 자연로그의 역함수인 지수 함수)
67+
($e$ : 오일러 상수; 근사값=$2.718281828459...$)
68+
6669
### 1.2.4. Tahn Function
6770
- 장단점이 sigmoid와 유사하다.
6871
- Sigmoid와 같이 잘 사용하지 않는 함수이다.
@@ -74,35 +77,128 @@ $$s(t)=\frac{1}{1+e^{-t}}$$
7477
- CNN에서 좋은 성능을 보였고, 현재 딥러닝에서 가장 많이 사용하는 활성화 함수이다.
7578
- 실제 뇌와 같이 모든 정보에 반응하는 것이 나닌 일부 정보에 대해 무시와 수용을 통해 보다 효율적인 결과를 낸다.
7679
- 미분값이 상수가 아닌 함수이며 backpropagation을 허용한다.
80+
- 비선형함수이고 도함수를 가지며 backpropagation을 허용한다.
81+
- 도함수 : (유)도함수, 미분 원하는 함수를 미분계수 구하는 식에 a대신 x로 넣었을 떄 모두 유도 된 함수를 도함수
7782

7883
<center><img src="https://mioscode.github.io/assets/images/dl2/relu_function.png" width="50%"></center>
7984

8085
### 1.2.6 Swish & Leacky ReLU & ELU
8186

8287
<center><img src="https://mioscode.github.io/assets/images/dl2/swish_function.png" width="50%"></center>
8388

84-
<center><img src="https://mioscode.github.io/assets/images/dl2/leacky_relu_function.png" width="50%"></center>
89+
<center><img src="https://mioscode.github.io/assets/images/dl2/leaky_relu_function.png" width="50%"></center>
8590

8691
<center><img src="https://mioscode.github.io/assets/images/dl2/elu_function.png" width="50%"></center>
8792

88-
## 1.1. 신경망 용어 정의
89-
- 타깃(target) : 기대 출력을 의미합니다.
90-
- 매핑(mapping) : 입력과 타깃의 관계로 입력을 representation로 변환, 연관시키는 것을 의미합니다.
91-
- 가중치(weight) : 머신 러닝, 딥러닝 모두 결국은 가장 효율적인 식을 찾는 것이 목표이며, 이런 식 또는 식에 필요한 파라미터를 칭합니다.
92-
- 손실함수(loss function) : 타깃과 출력값의 차이를 계산하는 함수입니다
93-
- 역전파(Backpropagation) : 손실함수의 결과를 개선하기 위해서 다시 결과에서부터 가중치를 수정하는 과정입니다. 이를 옵티마이저(optimizer)가 담당합니다.
93+
## 1.3. 다차원 배열 연산
94+
- 앞서 설명한 가중치의 값을 보다 편하게 하기 위해서 행렬 연산을 이용하는 것이다. 한 두개의 신경망 층은 인간이 계산할 수 있을지 모르겠지만 그 이상의 수 많은 차원의 수많은 뉴런층으로 구성된 신경망의 weight를 일일이 계산하는 것은 불가능한 일이다. 이를 컴퓨팅적으로도 쉽게 할 수 있도록 돕는 것이 행렬 연산이다.
95+
- 여기서 중요한 개념은 다차원 배열(행렬) 간의 곱 연산이다. 행렬의 곱이 성립하기 위해서는 기본적으로 아래의 조건을 따라야 한다.
96+
$$a \times b * c \times d = a \times d \ (when \ b = c )$$
97+
- $*$(곱 연산)의 안쪽에 있는 $b$와 $c$의 값이 일치해야 하며, 곱 연산을 했을 때 결과값은 $a \times d$의 형태로 나온다는 점이다. 이는 한쪽이 1차원 배열일 때도 동일하게 적용된다.
98+
99+
### 예제
100+
```python
101+
import numpy as np
102+
103+
X = np.array([[1,2]])
104+
print(X.shape)
105+
106+
W = np.array([[1,2,3], [4,5,6]])
107+
print(W.shape)
108+
109+
Y = np.dot(X, W)
110+
print(Y)
111+
```
112+
113+
<center><img src="https://mioscode.github.io/assets/images/dl2/times.png" width="50%"></center>
114+
115+
- 이런식으로 어떤 층의 노드(뉴런)의 개수가 몇 개가 되든 (위에서는 3개) 한 번의 연산으로 이 작업을 빠르게 수행할 수 있다. 행렬의 내적은 신경망에서 아주 중요한 개념인 것이다. 층이 몇 개이든 이와 같은 방법으로 가중치를 계속해서 계산해 나가는 것이라고 보면 된다.
116+
117+
## 1.4. 신경망 용어 정의
118+
- 타깃(target) : 기대 출력
119+
- 매핑(mapping) : 입력과 타깃의 관계로 입력을 representation로 변환, 연관시키는 것
120+
- 가중치(weight) : 머신 러닝, 딥러닝 모두 결국은 가장 효율적인 식을 찾는 것이 목표이며, 이런 식 또는 식에 필요한 파라미터
121+
- 손실함수(loss function) : 타깃과 출력값의 차이를 계산하는 함수
122+
- 역전파(Backpropagation) : 손실함수의 결과를 개선하기 위해서 다시 결과에서부터 가중치를 수정하는 과정, 이를 옵티마이저(optimizer)가 담당
123+
124+
## 1.5. 신경망의 훈련 순서
125+
1. 데이터를 입력한다.
126+
2. 여러 layer를 통해 예상 결과값을 만든다. (매핑)
127+
3. 실제 값과 비교해서 그 차이를 구한다. (타깃과 손실함수)
128+
4. 차이를 줄이기 위한 방법으로 앞의 layer들의 가중치를 수정해준다. (역전파)
129+
5. 이 방법의 반복으로 규칙을 계속 개선한다.
130+
131+
<center><img src="https://mioscode.github.io/assets/images/dl2/flowchart.png" width="50%"></center>
132+
133+
## 1.6. 신경망 3층 구현하기
134+
```python
135+
def init_network():
136+
network = {}
137+
network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
138+
network['b1'] = np.array([0.1, 0.2, 0.3])
139+
network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
140+
network['b2'] = np.array([0.1, 0.2])
141+
network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
142+
network['b3'] = np.array([0.1, 0.2])
143+
144+
return network
94145

95-
## 1.2. 신경망의 훈련 순서
96-
1. 데이터를 입력합니다.
97-
2. 여러 층을 통해 예상 결과값을 만듭니다. (매핑)
98-
3. 실제 값과 비교해서 그 차이를 구합니다. (타깃과 손실함수)
99-
4. 차이를 줄이기 위한 방법으로 앞의 층들의 가중치를 수정해줍니다. (역전파)
100-
5. 이 방법의 반복으로 규칙을 계속 개선합니다.
146+
def sigmoid(x):
147+
return 1 / (1 + np.exp(-x))
101148

102-
<center><img src="https://mioscode.github.io/assets/images/dl2/flowchart.jpg" width="50%"></center>
149+
def relu(x):
150+
return np.maximum(0, x)
151+
152+
def forward(network, x):
153+
W1, W2, W3 = network['W1'], network['W2'], network['W3']
154+
b1, b2, b3 = network['b1'], network['b2'], network['b3']
155+
156+
a1 = np.dot(x, W1) + b1
157+
z1 = sigmoid(a1)
158+
a2 = np.dot(z1, W2) + b2
159+
z2 = sigmoid(a2)
160+
a3 = np.dot(z2, W3) + b3
161+
y = a3
162+
163+
return y
164+
165+
def main():
166+
network = init_network()
167+
x = np.array([1.0, 0.5])
168+
y = forward(network, x)
169+
print(y)
170+
171+
if __name__ == '__main__':
172+
main()
173+
```
103174

104175
# 2. Loss Function
176+
> Neural Net을 거쳐서 나온 결과값과 실제 결과 값의 차이를 계산하는 함수
177+
178+
<center><img src="https://mioscode.github.io/assets/images/dl2/loss_function.png" width="50%"></center>
179+
180+
## 2.1. 손실함수를 왜 사용하는가?
181+
1. Loss Function이 있어야 학습이 올바르게 진행되는지를 알 수 있다.
182+
2. Loss function은 연속적으로 변화되는 값을 표시한다.
183+
- 정답률을 파라미터로 사용하면,
184+
- 100개 중 33개가 정답으로 판명된다면 정답률은 33%이다.
185+
- 만약 정확도를 개선한다 하더라도 33.32%와 값이 연속적인 값으로 변화하지 않는다.
186+
187+
## 2.2. 손실함수 종류
188+
### 2.2.1. MSE
189+
190+
$$MSE = \frac{1}{n} \sum_{i=1}^N (y_i-\tilde{y}_i)^2$$
191+
192+
### 2.2.2. Cross Function
193+
194+
$$\mathcal{L} (y_i-\tilde{y}_i) = - \sum_{i=1}^N y_i \log \hat{y_i}$$
195+
196+
## 2.3. 손실함수 테스트
197+
198+
1. Mean Squared Error 를 python으로 구현 해보자.
199+
2. Cross Entropy Error를 python을 구현 해보자.
200+
3. 실제 테스트를 해보자.
105201

106202

107203
# Reference
108-
- https://subinium.github.io/Keras-1/
204+
- [[https://subinium.github.io/Keras-1/]]

assets/images/dl2/loss_function.png

122 KB
Loading

assets/images/dl2/times.png

62.6 KB
Loading

0 commit comments

Comments
 (0)
0