7. 퍼셉트롞의 핚계
• 1969년 마빈 민스키(Marvin
Minsky)가 문제 제기
• XOR 같은 비선형 분류 불가능
• 다층 싞경망으로 해결핛 수 있지
만 학습 방법을 알지 못함
• 싞경망의 겨울 시작
8. 오차 역전파(Backpropagation)
• 1986년 제프리 힌튺(Geoffrey
Hinton)이 실험적으로 논증
• 오차의 기울기(Gradient)를 핚
번만 미분하고 그 결과를 뒤
로 젂파하면서 재사용
• 복잡핚 미분 계산을 빠르게
수행
• 다층 싞경망 사용 가능해짐
9. 다층 싞경망의 문제점
• 그래디언트 소실(Vanishing
Gradient)
– 히든 레이어를 늘려야 복잡핚 문
제 해결 가능
– 하지만 싞경망이 깊어질수록 오
차의 그래디언트가 사라져 학습
이 되지 않음
20. 싞경망의 입력과 출력
이미지나 텍스트를 모두 숫자로 변홖
강아지가 길 위에서
웃으며 앉아 있다
(0.1, 0.7, 0.2, … , 0.9, 0.3)
(0.4, 0.2, 0.8, … , 0.1, 0.7)
21. 텐서(Tensor)
• 숫자를 표현하는 데이터 구조
• 종류
– 스칼라 (0D 텐서)
– 벡터 (1D 텐서)
– 행렧 (2D 텐서)
– 텐서 (3D, 4D, 5D 텐서)
22. 스칼라 - 0D 텐서
• 하나의 숫자로 구성 # numpy는 수치 계산 패키지
>>> import numpy as np
>>> x = np.array(5)
# x의 정보
>>> x
array(5)
# x의 축(랭크) 개수
>>> x.ndim
0
23. 벡터 - 1D 텐서
• 하나의 축으로 구성
• 축(랭크)안에 여러 개의 차원으
로 이루어짐
# 1축, 3차원
>>> x = np.array([23, 7, 16])
# x의 정보
>>> x
array([23, 7, 16])
# x의 축(랭크) 개수
>>> x.ndim
1
24. 행렬 - 2D 텐서
• 2개의 축으로 구성 # 2축, 3차원
>>> x = np.array([[11, 5, 8],
[3, 17, 9]])
# x의 정보
>>> x
array([[11, 5, 8],
[3, 17, 9]])
# x의 축(랭크) 개수
>>> x.ndim
2
25. 텐서 – 3D~5D 텐서
• 3개 이상의 축으로 구성 # 3축, 2차원, 2차원
>>> x = np.array([[[16, 4],
[3, 17]],
[[21, 8],
[14, 2]],
[[5, 7],
[28, 15]]])
# x의 축(랭크) 개수
>>> x.ndim
3
26. 텐서의 속성
• 축
– 가장 기본이 되는 형태
• 크기(shape)
– 축에 따른 모든 차원의 개수
• 데이터 타입
– 데이터의 종류
– 정수, 실수, 캐릭터 등
# 2축, 3차원
>>> x = np.array([[11, 5, 8],
[3, 17, 9]])
# x의 축
>>> print(x.ndim)
2
# x의 크기
>>> print(x.shape)
(2, 3)
# x의 데이터 타입
>>> print(x.dtype)
int64
50. 오차 역전파(Backpropagation)
• 1986년 제프리 힌튺(Geoffrey
Hinton)이 실험적으로 논증
• 오차의 기울기(Gradient)를 핚
번만 미분하고 그 결과를 뒤
로 젂파하면서 재사용
• 복잡핚 미분 계산을 빠르게
수행
• 다층 싞경망 사용 가능해짐
오차함수 미분
미분값 재사용
미분값 재사용
62. 소스 코드 분석
순차 모델을 생성하고 싞경망 레이어를 추가
Dense : 완전 연결 싞경망
activation : 홗성화 함수
input_shape : 입력 크기
출력 크기 시그모이드는
0~1 숫자 출력
63. 소스 코드 분석
학습 및 평가 방법 지정
optimizer : 경사하강법 종류
loss : 오차 함수
metrics : 평가 지표
rmsprop : 경사하강법의 핚가지 방법
binary_crossentropy : 이진 분류에 사용되는 오차 함수
accuracy : 정확도
64. 소스 코드 분석
입력과 출력의 데이터를 넣고 학습 시작
epochs : 반복 횟수
batch_size : 핚번에 들어가는 입력의 크기
전체 데이터가 4, 배치가 1이므로
1개의 데이터씩 4번 수행하면 1 에폭 완료