Skip to content

Commit 518c944

Browse files
committed
Neural network learning
1 parent fe2247b commit 518c944

File tree

1 file changed

+291
-0
lines changed

1 file changed

+291
-0
lines changed

Ch04.Neural_network_learning.ipynb

+291
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,291 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"import numpy as np\n",
10+
"import matplotlib.pyplot as plt"
11+
]
12+
},
13+
{
14+
"cell_type": "markdown",
15+
"metadata": {},
16+
"source": [
17+
"# 신경망 학습\n",
18+
"---\n",
19+
"**학습**이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻한다. \n",
20+
"신경망이 학습할 수 있도록 해주는 **지표**인 손실 함수를 소개한다. 이 손실 함수의 결괏값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표이다."
21+
]
22+
},
23+
{
24+
"cell_type": "markdown",
25+
"metadata": {},
26+
"source": [
27+
"## 4.1 데이터에서 학습\n",
28+
"데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다는 뜻이다.\n",
29+
"\n",
30+
"### 4.1.1 데이터 주도 학습\n",
31+
"기계학습은 데이터가 생명이다. 데이터에서 답을 찾고 데이터에서 패턴을 발견하고 데이터로 이야기를 만드는, 그것이 바로 기계학습이다. \n",
32+
"그런 방법의 하나로, 이미지에서 **특징**<sup>feature</sup>을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있다. \n",
33+
"이미지의 특징은 보통 벡터로 기술하고, 컴퓨터 비전 분야에서는 SIFT, SURF, HOG 등의 특징을 많이 사용한다. \n",
34+
"이런 특징을 사용하여 이미지 데이터를 벡터로 변환하고, 변환된 벡터를 가지고 지도 학습 방식의 대표 분류 기법인 SVM, KNN 등으로 학습할 수 있다.\n",
35+
"\n",
36+
"하지만 신경망은 이미지를 '있는 그대로' 학습한다.\n",
37+
"\n",
38+
"**※ NOTE** \n",
39+
"딥러닝을 **종단간 기계학습**<sup>end-to-end machine learning</sup>이라고 한다. \n",
40+
"종단간은 '처음부터 끝까지' 라는 의미로, 데이터(입력)에서 목표한 결과(출력)을 사람의 개입 없이 얻는다는 뜻이다."
41+
]
42+
},
43+
{
44+
"cell_type": "markdown",
45+
"metadata": {},
46+
"source": [
47+
"### 4.1.2 훈련 데이터와 시험 데이터\n",
48+
"기계학습 문제는 데이터를 **훈련 데이터**<sup>training data</sup>와 **시험 데이터**<sup>test data</sup>로 나눠 학습과 실험을 수행하는 것이 일반적이다. \n",
49+
"우선 훈련 데이터만 사용하여 학습하면서 최적의 매개변수를 찾는다. 그런 다음 시험 데이터를 사용하여 앞서 훈련한 모델의 실력을 평가하는 것이다. \n",
50+
"이를 구분하는 이유는 범용적으로 사용할 수 있는 모델을 원하기 때문이다. \n",
51+
"그래서 데이터셋 하나로만 매개변수의 학습과 평가를 수행하면 올바른 평가가 될 수 없다. 한 데이터셋에만 지나치게 최적화된 상태를 **오버피팅**<sup>overfitting</sup> 이라고 한다."
52+
]
53+
},
54+
{
55+
"cell_type": "markdown",
56+
"metadata": {},
57+
"source": [
58+
"## 4.2 손실 함수\n",
59+
"신경망 학습에서는 현재의 상태를 '하나의 지표'로 표현한다. 그리고 그 지표를 가장 좋게 만들어주는 가중치 매개변수의 값을 탐색하는 것이다. \n",
60+
"최적의 매개변수를 탐색하는데 사용되는 지표를 **손실 함수**<sup>loss function</sup>라고 한다. \n",
61+
"일반적으로 손실 함수는 평균 제곱 오차와 교차 엔트로피 오차를 사용한다."
62+
]
63+
},
64+
{
65+
"cell_type": "markdown",
66+
"metadata": {},
67+
"source": [
68+
"### 4.2.1 평균 제곱 오차\n",
69+
"가장 많이 쓰이는 손실 함수는 **평균 제곱 오차**<sup>mean squared error, MSE</sup>이다.\n",
70+
"\n",
71+
"**[식 4.1]** \n",
72+
"$\n",
73+
"\\begin{align}\n",
74+
"E = \n",
75+
"\\frac{1}{n} \\sum_{i=1}^n(y_i - t_i)^2\n",
76+
"\\end{align}\n",
77+
"$\n",
78+
"\n",
79+
"- $y_i$는 신경망의 출력(신경망이 추정한 값)\n",
80+
"- $t_i$는 정답 레이블\n",
81+
"- $n$은 데이터의 차원 수"
82+
]
83+
},
84+
{
85+
"cell_type": "code",
86+
"execution_count": null,
87+
"metadata": {},
88+
"outputs": [],
89+
"source": [
90+
"y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]\n",
91+
"t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]"
92+
]
93+
},
94+
{
95+
"cell_type": "markdown",
96+
"metadata": {},
97+
"source": [
98+
"신경망의 출력 y 는 소프트맥스 함수의 출력이다. \n",
99+
"정답 레이블인 t는 정답을 가리키는 위치의 원소는 1로, 그 외에는 0으로 표기한다. 이는 **원-핫 인코딩** 이라 한다."
100+
]
101+
},
102+
{
103+
"cell_type": "code",
104+
"execution_count": 11,
105+
"metadata": {},
106+
"outputs": [],
107+
"source": [
108+
"def mean_squared_error(y, t):\n",
109+
" return np.sum((y-t)**2) / t.size"
110+
]
111+
},
112+
{
113+
"cell_type": "code",
114+
"execution_count": 18,
115+
"metadata": {},
116+
"outputs": [
117+
{
118+
"data": {
119+
"text/plain": [
120+
"0.019500000000000007"
121+
]
122+
},
123+
"metadata": {},
124+
"output_type": "display_data"
125+
},
126+
{
127+
"data": {
128+
"text/plain": [
129+
"0.11950000000000001"
130+
]
131+
},
132+
"metadata": {},
133+
"output_type": "display_data"
134+
}
135+
],
136+
"source": [
137+
"t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]\n",
138+
"\n",
139+
"y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]\n",
140+
"\n",
141+
"# 첫 번째 결과\n",
142+
"display(mean_squared_error(np.array(y),np.array(t)))\n",
143+
"\n",
144+
"y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]\n",
145+
"\n",
146+
"# 두 번째 결과\n",
147+
"display(mean_squared_error(np.array(y),np.array(t)))"
148+
]
149+
},
150+
{
151+
"cell_type": "markdown",
152+
"metadata": {},
153+
"source": [
154+
"위의 평균 제곱 오차의 결과는 첫 번째 추정 결과가 (오차가 더 작으므로) 정답에 더 가깝다는 것을 알 수 있다."
155+
]
156+
},
157+
{
158+
"cell_type": "markdown",
159+
"metadata": {},
160+
"source": [
161+
"### 4.2.2 교차 엔트로피 오차\n",
162+
"또 다른 손실 함수로서 **교차 엔트로피 오차**<sup>cross entropy error, CEE</sup>도 자주 이용한다.\n",
163+
"\n",
164+
"**[식 4.2]** \n",
165+
"$\n",
166+
"\\begin{align}\n",
167+
"E = \n",
168+
"-\\sum_{i=1}^n t_i \\log y_i\n",
169+
"\\end{align}\n",
170+
"$\n",
171+
"\n",
172+
"- $\\log$는 밑이 $e$인 자연로그 $\\log_e$\n",
173+
"- $y_i$는 신경망의 출력\n",
174+
"- $t_i$는 정답 레이블"
175+
]
176+
},
177+
{
178+
"cell_type": "code",
179+
"execution_count": 15,
180+
"metadata": {},
181+
"outputs": [
182+
{
183+
"data": {
184+
"image/png": "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\n",
185+
"text/plain": [
186+
"<Figure size 432x288 with 1 Axes>"
187+
]
188+
},
189+
"metadata": {
190+
"needs_background": "light"
191+
},
192+
"output_type": "display_data"
193+
}
194+
],
195+
"source": [
196+
"x = np.arange(0.01, 1.0, 0.01)\n",
197+
"y = np.log(x)\n",
198+
"\n",
199+
"plt.plot(x, y, label=\"log\")\n",
200+
"plt.legend()\n",
201+
"\n",
202+
"plt.show()"
203+
]
204+
},
205+
{
206+
"cell_type": "code",
207+
"execution_count": 17,
208+
"metadata": {},
209+
"outputs": [],
210+
"source": [
211+
"def cross_entropy_error(y, t):\n",
212+
" # np.log() 함수에 0을 입력하면 마이너스 무한대가 되므로 보정한다.\n",
213+
" delta = 1e-7\n",
214+
" return -np.sum(t * np.log(y + delta))"
215+
]
216+
},
217+
{
218+
"cell_type": "code",
219+
"execution_count": 19,
220+
"metadata": {},
221+
"outputs": [
222+
{
223+
"data": {
224+
"text/plain": [
225+
"0.510825457099338"
226+
]
227+
},
228+
"metadata": {},
229+
"output_type": "display_data"
230+
},
231+
{
232+
"data": {
233+
"text/plain": [
234+
"2.302584092994546"
235+
]
236+
},
237+
"metadata": {},
238+
"output_type": "display_data"
239+
}
240+
],
241+
"source": [
242+
"t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]\n",
243+
"\n",
244+
"y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]\n",
245+
"\n",
246+
"# 첫 번째 결과\n",
247+
"display(cross_entropy_error(np.array(y),np.array(t)))\n",
248+
"\n",
249+
"y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]\n",
250+
"\n",
251+
"# 두 번째 결과\n",
252+
"display(cross_entropy_error(np.array(y),np.array(t)))"
253+
]
254+
},
255+
{
256+
"cell_type": "markdown",
257+
"metadata": {},
258+
"source": [
259+
"### 4.3.3 미니배치 학습\n"
260+
]
261+
},
262+
{
263+
"cell_type": "code",
264+
"execution_count": null,
265+
"metadata": {},
266+
"outputs": [],
267+
"source": []
268+
}
269+
],
270+
"metadata": {
271+
"kernelspec": {
272+
"display_name": "Python 3",
273+
"language": "python",
274+
"name": "python3"
275+
},
276+
"language_info": {
277+
"codemirror_mode": {
278+
"name": "ipython",
279+
"version": 3
280+
},
281+
"file_extension": ".py",
282+
"mimetype": "text/x-python",
283+
"name": "python",
284+
"nbconvert_exporter": "python",
285+
"pygments_lexer": "ipython3",
286+
"version": "3.7.1"
287+
}
288+
},
289+
"nbformat": 4,
290+
"nbformat_minor": 2
291+
}

0 commit comments

Comments
 (0)