Neural Networks
Outlook
• Part 1: 파이썬과 텐서플로우 소개
• Part 2: 회귀 분석과 로지스틱 회귀
• Part 3: 뉴럴 네트워크 알고리즘
• Part 4: 콘볼루션 뉴럴 네트워크
2
지난 시간에...
3
선형 회귀와 로지스틱 회귀
• 선형 회귀분석은 연속된 숫자를 예측합니다.(Regression)
• 환율 가격 예측, 농작물 수확량 등
• 로지스틱 회귀는 미리 정의된 클래스 레이블을 예측합니다(Classification)
• 이진분류: 스팸분류, 암진단, 다중 분류: 손글씨 숫자 분류
4
𝑦" = 𝑤	×	𝑥 + 𝑏
선형 회귀의 오차함수
5
Neuron
𝑦"
𝑤
𝑦" = 𝑤	×	𝑥 + 𝑏
𝑥
𝑏
×
+
𝒚
𝐽 =
1
2𝑚
/ 𝑦 − 𝑦" 1
2
345
MSE(평균제곱에러)
선형회귀 학습
6
Neuron
𝑦"
𝑤 = 𝑤 + ∆𝑤 = 𝑤 +
1
𝑚
(𝑦 − 𝑦")𝑥
𝑥 ×
+
𝒚
𝑏 = 𝑏 + ∆𝑏 = 𝑏 +
1
𝑚
(𝑦 − 𝑦")
(𝑦 − 𝑦")
𝐽 =
1
2𝑚
/ 𝑦 − 𝑦" 1
2
345
선형 회귀 예제
7
변수 초기화
학습 노드 실행
가중치 W, b 변수를 0으로 초기화
y_hat 계산
손실 함수인 MSE 계산
손실함수 노드를 최적화
하는 학습노드 생성
결과 그래프
w = 0.099, b = 0.298 8
로지스틱 함수
9
• 로지스틱(logistic) 또는 시그모이드(sigmoid) 함수는 -∞~+∞입력에 대해
0~1 사이의 값을 출력합니다.
𝑦" =	
1
1 +	 𝑒:(;	×	<	=	>)
=	
1
1 +	 𝑒:?	
𝑧 = 𝑤	×	𝑥 + 𝑏
로지스틱 회귀 학습
10
Neuron Sigmoid
𝑥 ×
+
𝒚𝑦"
𝑤 = 𝑤 + ∆𝑤 = 𝑤 +
1
𝑚
(𝑦 − 𝑦")𝑥
𝑏 = 𝑏 + ∆𝑏 = 𝑏 +
1
𝑚
(𝑦 − 𝑦")
(𝑦 − 𝑦")
𝐽 = −	
1
𝑚
/[𝑦𝑙𝑜𝑔 𝑦" + 1 − 𝑦 log	(1 − 𝑦")]
2
345
𝑦" = 𝜎(𝑧) =	
1
1 +	 𝑒:?𝑧 = 𝑤	×	𝑥 + 𝑏
로지스틱 회귀 예제
11
0.2
0.6
⋯
0.1
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
⋅
0.1
⋮
0.3
=
1.5
5.9
⋮
0.7
										+ 0.1 =
1.6
6.0
⋮
0.8
30개 가중치
569개 샘플
𝑥							×		𝑊																				 + 𝑏 = 𝑦"
[569, 30] x [30, 1] = [569, 1] + [1] = [569, 1]
1개 편향(bias)30개 특성
569개 결과
(logits)
손실 함수와 최적화
로지스틱(시그모이드) 크
로스 엔트로피 손실함수
학습속도 매우 낮게
변수 초기화
12
학습
• 여기서는 예를 간단히 하기위해 학습 데이터로 모델의 성능을
평가했습니다만 실전에서는 이렇게 해서는 안됩니다
prediction 의 모든 원
소에 적용, 0.5보다 크
면 True, 작으면 False[569, 1] 크기
5000번 학습하면서
손실함수 값 기록
92% 정확도
13
정리
• 선형 회귀
• 회귀 모델입니다.
• 선형 회귀의 대표적인 비용함수는 MSE(mean square error)입니다.
• 경사하강법을 사용하여 점진적으로 최적의 값을 찾았습니다.
• 특성이 많을 경우 성능이 뛰어나며 대량의 데이터셋에도 잘 동작합니다.
• 로지스틱 회귀
• 분류 모델 입니다.
• 이진 분류의 경우 시그모이드 함수의 결과가 0.5 보다 높을 때는 True, 그 이하는
False 로 분류합니다.
• 시그모이드 함수를 사용한 로지스틱 회귀의 비용함수 미분의 결과는 선형 회귀와 동
일합니다.
14
멀티 레이어 퍼셉트론(MLP)
15
퍼셉트론(Perceptron)
• 1957년 프랑크 로젠블라트가 발표
• 뉴럴 네트워크를 멀티레이어 퍼셉트론으로도 부름
• 사이킷런(v0.18)에는 MLPClassifier, MLPRegressor
16
Perceptron vs Logistic Neuron
활성화 함수
가중치
𝑤5~𝑤YZ
위스콘신 데이터
𝑥5~𝑥YZ
17
레이어(Layer)
...
...
𝑥Z
𝑥5
𝑥YZ
레이어는 여러개의 뉴런으로
구성되어 있습니다.
하나의 뉴런은 여러개
의 뉴런과 연결되어 있
습니다.
가중치는 30 x 10 = 300개가 필요함.
𝑏Z
𝑏5Z
편향(바이어스)는 10개가 필요함
18
뉴럴 네트워크
입력데이터
출력클래스
(이진분류: 1개, 다중 분류: n개)
19
네이밍(Naming)
• 완전 연결 뉴럴 네트워크
(Fully Connected Neural Network)
• 덴스 네트워크
(Dense Network)
• 멀티 레이어 퍼셉트론
(Multi-Layer Perceptron)
• 피드 포워드 뉴럴 네트워크
(Feed Forward Neural Network)
20
행렬 표현
21
로직스틱의 행렬 계산
22
...𝑥Z
𝑥5
𝑥YZ
𝑏Z
𝑥5
0.6
⋯
𝑥YZ
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
⋅
𝑤5
⋮
𝑤YZ
=
1.5
5.9
⋮
0.7
										+ 0.1 =
1.6
6.0
⋮
0.8
30개 가중치:
569개 샘플에
모두 적용
569개 샘플
𝑥							×		𝑊																				 + 𝑏 = 𝑧
[569, 30] x [30, 1] = [569, 1] + [1] = [569, 1]
1개 편향(bias):
569개 샘플에 모두 적용
(브로드캐스팅)30개 특성
569개 결과
(logits)
뉴런의 계산식
23
A
B
C
a
b
𝑤[
𝑤[]
𝑤[^
𝑏[
𝑎 = 𝐴×𝑤[ + 𝐵×𝑤[] + 𝐶×𝑤[^ + 𝑏[
𝑨		𝑩		𝑪 ×
𝒘 𝒂𝑨
𝒘 𝒂𝑩
𝒘 𝒂𝑪
+ 𝒃 𝒂 = (𝒂)
행렬 곱으로 표현 가능
행렬 표현
24
A
B
C
a
b
𝑤[
𝑤[]
𝑤[^
𝑏[
𝑎 = 𝐴×𝑤[ + 𝐵×𝑤[] + 𝐶×𝑤[^ + 𝑏[
𝑏 = 𝐴×𝑤> + 𝐵×𝑤>] + 𝐶×𝑤>^ + 𝑏>
𝑨		𝑩		𝑪 ×
𝒘 𝒂𝑨			𝒘 𝒃𝑨
𝒘 𝒂𝑩			𝒘 𝒃𝑩
𝒘 𝒂𝑪			𝒘 𝒃𝑪
+ 𝒃 𝒂			𝒃 𝒃 = (𝒂			𝒃)
행렬 표현
25
A
B
C
a
b
𝑤>
𝑤>]
𝑤>^ 𝑏>
𝑎 = 𝐴×𝑤[ + 𝐵×𝑤[] + 𝐶×𝑤[^ + 𝑏[
𝑨		𝑩		𝑪 ×
𝒘 𝒂𝑨			𝒘 𝒃𝑨
𝒘 𝒂𝑩			𝒘 𝒃𝑩
𝒘 𝒂𝑪			𝒘 𝒃𝑪
+ 𝒃 𝒂			𝒃 𝒃 = (𝒂			𝒃)
𝑏 = 𝐴×𝑤> + 𝐵×𝑤>] + 𝐶×𝑤>^ + 𝑏>
레이어의 행렬 계산
26
𝑥5
0.6
⋯
𝑥YZ
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
⋅
𝑤5
5
⋮
𝑤YZ
5
⋱
𝑤5
5Z
⋮
𝑤YZ
5Z
=
1.5
5.9
⋮
0.7
⋱
1.1
0.2
⋮
0.5
		+ 𝑏5 ⋯ 𝑏YZ =
1.2
2.9
⋮
1.7
⋱
1.6
2.2
⋮
4.1
569 x 10 크기
569개
샘플
𝑥							×		𝑊																				 + 𝑏 = 𝑧
[569, 30] x [30, 10] = [569, 10] + [10] = [569, 10]
10개 편향(bias)
30개 특성
569 x 10개 결과
(logits)
...
𝑥Z
𝑥5
𝑥YZ
𝑏Z
𝑏5Z
30 x 10개
가중치
뉴런, 레이어의 객체는 어디에?
• 뉴런과 레이어를 의미하는 특별한 객체가 없습니다.
• 뉴런은 행렬의 원소로 표현되고 레이어는 행렬곱으로 표현됩니다.
• 고수준 라이브러리(Keras, tf.contrib.layer)에서는 레이어를 행렬 연산을 감
싸고 있는 객체로 표현합니다.
• 콘볼루션 뉴럴 네트워크를 구현하기 위해서 텐서플로우의 콘볼루션 레이
어 API를 사용하겠습니다.(직접 행렬식으로 구현하기 복잡하기 때문에)
27
활성화 함수
28
두개의 뉴런
1번
Neuron
ŷ
w1
x
b1
*
+
2번
Neuron
w2
t
b2
*
+
29
선형 함수의 중첩
𝑦" = 𝑤1	×	𝑡 + 𝑏1
= w1	×	 𝑤5×	𝑥 + 𝑏5 + 𝑏1
= 𝑤1	×	𝑤5 ×	𝑥 + 𝑏5 + 𝑏1 = 𝑤	×	𝑥 + 𝑏
1번
ŷ
b1
*
+
2번
t
b2
*
+
30
비선형 문제를
학습하기 어려움
x
w1 w2
비선형 함수
1번
Neuron
ŷ
w1
x
b1
*
+
2번
Neuron
w2
t
b2
*
+
비선형 활성화 함수
(Activation Function)를
레이어 사이에 위치시킴
31
전체 레이어
...
...
히든 레이어
입력 레이어
출력 레이어
입력 데이터
	
	
	
	
	
	
	
	
	
	
	
	
출력 레이블
	
	
	
	
	
	
	
	
	
	
	
	
활성화함수
활성화함수
𝑥 𝑦"
𝑤5, 𝑏5 𝑤1, 𝑏1
32
시그모이드(sigmoid)
• 혹은 로지스틱(logistic) 함수라고도 합니다.
• -∞~+∞입력에 대해 0~1 사이의 값을 출력합니다.
𝑦" =	
1
1 +	 𝑒:(;	×	<	=	>)
=	
1
1 +	 𝑒:?	
𝑧 = 𝑤	×	𝑥 + 𝑏
33
렐루(ReLU)
• Rectified Linear Unit
• -∞~+∞입력에 대해 0~+∞ 사이의 값을 출력합니다.
𝑦" = max	(0, 𝑧)	
𝑧 = 𝑤	×	𝑥 + 𝑏
34
다중 분류
35
로지스틱 회귀
Neuron
𝑤
*
+
Sigmoid
0 아니면 1
𝑦" =	
1
1 +	 𝑒:?
𝑥
𝑏
𝑦"
36
여러개를 분류하려면
Dog
Cat
Rabbit
37
출력 레이어와 시그모이드
Dog
Cat
Rabbit
Sigmoid
Sigmoid
Sigmoid
38
다중 분류(Multiclass Classification)
Dog
Cat
Rabbit
0.8
0.3
0.1
분류 실패 !
39
출력값 비교
Dog
Cat
Rabbit
𝑦"5 =
0.9
0.8
0.7
𝑦"1 =
0.5
0.2
0.1
40
소프트맥스(Softmax)
𝑦"opq =
𝑒
?rst
𝑒
?rst
+ 𝑒
?uvw
+ 𝑒
?xvyyzw
=
𝑒
?rst
∑ 𝑒?z|
345
𝑦" =	
𝑦"opq
𝑦"}[~
𝑦"•[>>3~
Dog
Cat
Rabbit
𝒆
𝒛 𝒅𝒐𝒈
𝒆
𝒛 𝒄𝒂𝒕
𝒆
𝒛 𝒓𝒂𝒃𝒃𝒊𝒕
41
𝑧 = 𝑤	×	𝑥 + 𝑏
출력값 비교
Dog
Cat
Rabbit
𝑦"5 =
0.9
0.8
0.7
𝑦"1 =
0.5
0.2
0.1
𝑦"5 =
0.59
0.26
0.15
𝑦"1 =
0.74
0.18
0.08
출력값 정규화
시그모이드 출력
소프트맥스 출력
42
One-hot-encoding
• 소프트맥스의 출력 벡터와 크기를 맞추기 위해 정답 데이터의 형태를 변
경합니다.
• 정답 위치는 1 나머지는 0
43
𝑦" =
0.59
0.26
0.15
Dog 1
Cat 2
Rabbit 3
1
0
0
0
1
0
0
0
1
𝒚
전체 레이어
...
...
히든 레이어
입력 레이어
출력 레이어
입력 데이터
	
	
	
	
	
	
	
	
	
	
	
	
출력 레이블
	
	
	
	
	
	
	
	
	
	
	
	
𝑥 𝑦"
𝑤5, 𝑏5 𝑤1, 𝑏1
시그모이드, 렐루
소프트맥스
44
경사하강법
45
로지스틱회귀의 그래디언트
Neuron Sigmoid
𝑥 ×
+
𝒚𝑦"
𝑤
𝑏
(𝑦 − 𝑦")
46
𝑦" = 𝜎(𝑧) =	
1
1 +	 𝑒:?
𝐽 = −	
1
𝑚
/[𝑦𝑙𝑜𝑔 𝑦" + 1 − 𝑦 log	(1 − 𝑦")]
2
345
비용함수
시그모이드
소프트맥스에서는
47
Neuron
*
+
Softmax
𝑖𝑛𝑝𝑢𝑡 𝑦"
𝐽 = −	
1
𝑚
/ 𝑦𝑙𝑜𝑔 𝑦"
2
345
그래디언트는?
𝑦" =
𝑒?
∑ 𝑒?z|
345
(𝑦 − 𝑦")
비용함수
소프트맥스
= 𝑤 + ∆𝑤 = 𝑤 +
1
𝑚
(𝑦 − 𝑦")𝑥
= 𝑏 + ∆𝑏 = 𝑏 +
1
𝑚
(𝑦 − 𝑦")
𝑤
𝑏
Neuron
이전 레이어로는?
역전파(backpropagation)
• 미분의 연쇄법칙(Chain Rule)입니다.
• 히든레이어에 대한 손실함수의 미분=히든레이어 미분 x 출력레이어 미분
• 출력레이어의 미분을 이전 레이어로 전달하는 것을 오차 역전파라 표현합
니다.
48
𝑓 𝑔 𝑥
Ž
= 𝑓Ž 𝑔 𝑥 𝑔′(𝑥) 𝑓 = 𝑔1 + 1
𝑔 = 𝑥1 + 1
𝜕𝑓
𝜕𝑥
=
𝜕𝑓
𝜕𝑔
×
𝜕𝑔
𝜕𝑥
= 2𝑔 × 2𝑥
= 2 𝑥1 + 1 ×2𝑥 = 4𝑥Y + 4𝑥
역전파 알고리즘
49
Neuron
*
+
Softmax
𝑡 𝑦"
𝜕𝐽
𝜕𝑧
= (𝑦 − 𝑦")
𝑧 = 𝑤×𝑡 + 𝑏
𝑏 = 𝑏 +
𝜕𝐽
𝜕𝑏
=
𝜕𝐽
𝜕𝑧
×
𝜕𝑧
𝜕𝑏
= (𝑦 − 𝑦")
Neuron
𝑤 = 𝑤 +
𝜕𝐽
𝜕𝑤
=
𝜕𝐽
𝜕𝑧
×
𝜕𝑧
𝜕𝑤
= 𝑦 − 𝑦" 𝑡
𝑧
𝜕𝐽
𝜕𝑡
=
𝜕𝐽
𝜕𝑧
×
𝜕𝑧
𝜕𝑡
= 𝑦 − 𝑦" 𝑤
𝐽𝜕𝐽
𝜕𝑠
=
𝜕𝐽
𝜕𝑡
×
𝜕𝑡
𝜕𝑠
= 𝑦 − 𝑦" 𝑤×𝑡(1 − 𝑡)
𝑠
시그모이드
SGD, mini-batch GD
• Batch 그래디언트 디센트
• 전체 훈련 데이터를 사용
• 가장 좋은 방법, 대규모 데이터 셋에 적용하기 힘
듬
• SGD(Stochastic Gradient Descent):
• 훈련 데이터 하나씩 사용
• 빠른 학습 가능, 노이즈 데이터로 인해 변동이 큼
• mini-batch GD
• 훈련 데이터를 조금씩 나누어 사용
• Batch 와 SGD의 절충안으로 일정 개수의 데이터
를 이용하여 학습
50
MNIST 손글씨 분류
51
MNIST
• 손글씨 숫자 데이터 세트로 딥러닝 분야의 Hello World 예제
• http://yann.lecun.com/exdb/mnist/
• 28x28 크기의 흑백 이미지
• 55,000개 훈련 이미지, 10,000개 테스트 이미지
52
데이터 로딩
53
MNIST_data 폴더에 데이터 다
운로드하여 읽어들임
55,000개 훈련데이터
5,000개 테스트 데이터
레이어 구성
...
...
히든 레이어
100개
입력 레이어
784개
출력 레이어
10개
입력 데이터
28x28=784
	
	
	
	
	
	
	
	
	
	
	
	
출력 레이블
	
	
	
	
	
	
	
	
	
	
	
	
𝑥 𝑦"
𝑤5, 𝑏5 𝑤1, 𝑏1
시그모이드
소프트맥스
54
플레스홀더
55
𝑥5
0.6
⋯
𝑥YZ
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
?개 샘플
784개 특성
0
0
⋯
1
0
⋮ ⋱ ⋮
1 ⋯ 0
?개 샘플
10개 원소의 원핫벡터
• 훈련 데이터를 주입받기 위한 공간을 준비해 놓습니다.
첫번째 레이어
• 활성화 함수는 텐서의 차원에 영향을 미치지 않습니다.
56
100개 가중치
?개 샘플
𝑥								×						𝑊																				 + 𝑏		 = 											𝑠
𝑡 = 𝜎(𝑠)
[?, 784] x [784, 100] + [100] = [?, 100]
100개 편향(bias)
784개 특성
?개 결과
𝑥5
0.6
⋯
𝑥YZ
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
⋅
𝑤5
5
⋮
𝑤’“”
5
⋱
𝑤5
5ZZ
⋮
𝑤’“”
5ZZ
+ 𝑏5 ⋯ 𝑏5ZZ =
1.2
2.9
⋮
1.7
⋱
1.6
2.2
⋮
4.1
𝑡5
0.6
⋯
𝑡5ZZ
0.2
⋮ ⋱ ⋮
0.5 ⋯ 0.4
⋅
𝑤5
5
⋮
𝑤5ZZ
5
⋱
𝑤5
5Z
⋮
𝑤5ZZ
5Z
+ 𝑏5 ⋯ 𝑏5Z =
1.2
2.9
⋮
1.7
⋱
1.6
2.2
⋮
4.1
두번째 레이어
57
10개 가중치
?개 샘플
𝑡								×						𝑊																 + 𝑏		 = 											𝑧
[?, 100] x [100, 10] + [10] = [?, 10]
10개 편향(bias)
100개 특성
?개 결과
학습 설정
58
argmax(y) = [?]
argmax(y_hat) = [?]
y = [?, 10]
z = [?, 10]
불리언을 숫자로 바꾸고
평균을 냅니다.
[True, False, True,... ] à [1.0, 0.0, 1.0, ...]
소프트맥스 통과전 : z
소프트맥스 통과후 : y_hat
미니 배치 훈련
59
100개씩 데이터 샘플링
x: [100, 784]
y: [100, 10]
결과
60
테스트 데이터 사용
Materials
• Github :
https://github.com/rickiepark/tfk-notebooks/tree/master/tensorflow_for_beginners
• Slideshare :
61
감사합니다.
62

3.neural networks