3.1 퍼셉트론에서 신경망으로
- 가중치 매개변수의 채택
1) 퍼셉트론에서 가중치를 설정하는 작업을 사람이 수동으로 해야 하는 것을 신경망을 통해 해결할 수 있음
2) 신경망은 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습 가능
- 신경망의 구조 : 입력층(0층), 은닉층, 출력층
1) 은닉층 : 은닉층의 뉴런은 사람의 눈에는 보이지 않음
2) 입력층, 은닉층, 출력층 3개의 층으로 구성될 경우, 가중치를 갖는 층은 은닉층 1개와 출력층 1개로 총 2개이므로 ‘2층 신경망’이라고 칭함
- 활성화 함수 (Activation Function) : 입력신호의 총합을 출력 신호로 변환하는 함수. 입력 신호의 총합이 활성화를 일으키는지를 정함. h(x)로 주로 표기
- 뉴런과 노드의 표기 : 가중치 신호를 조합한 결과가 a라는 노드이며, 활성화 함수 h()를 통과해 y라는 노드로 변환됨

3.2. 활성화 함수
- 계단함수(step function) : 임계값을 경계로 출력이 바뀌는 함수

- 시그모이드 함수(sigmoid function)

- 계단함수와 시그모이드 함수의 비교
1) 시그모이드 함수의 경우 부드러운 곡선이며 입력에 따라 출력이 연속적으로 변함(매끄러움)
2) 퍼셉트론과는 다르게, 시그모이드 함수로는 신경망에서는 연속적 실수가 흐를 수 있음
3) 두 함수 모두 입력이 작을 때 출력은 0에 가깝고 입력이 커지면 1에 가까워짐. 입력이 중요하면 큰 값을 출력하고 중요치 않으면 작은 값을 출력함
4) 두 함수 모두 비선형 함수임
3.6. 비선형 함수
- 선형함수 : 함수의 출력이 입력의 상수배만큼 변하는 함수
- 비선형 함수 : 선형이 아닌 함수로, 직선 1개로는 그릴 수 없는 함수
- 신경망에서는 다층구조를 구현하기 위해 활성화 함수로 비선형 함수를 사용해야 함. 선형함수로 신경망을 구현한다면, 은닉층이 없는 네트워크와 같음
3.7. ReLU 함수(Rectified Linear Unit, 렐루)
- ReLU 함수 : 입력이 0 넘으면 입력을 그대로 출력하고, 0이하이면 0을 출력

3.3. 다차원 배열의 계산
- 다차원 배열
1) 행렬(matrix) : 2차원 배열. 행(row)은 가로 방향 배열이며, 열(column)은 세로 방향 배열
2) numpy.dim() : 배열의 차원 수 리턴
3) 배열이름.shape : 배열의 형상을 알 수 있는 인스턴스 변수. 튜플로 반환(4X3X2 배열이라면 (4, 3, 2)로)
- 행렬의 곱
1) numpy.dot(행렬1, 행렬2) : 행렬의 곱 수행 함수
2) 입력이 1차원 배열이면 벡터를, 2차원 배열이면 행렬 곱을 계산
3) shape(형상) 조건 : AXB라면 A의 열과 B의 행이 동일해야 함
3.4. 3층 신경망 구현하기
- 행렬의 형상으로 표기

- 소스 코드는 하단 링크 참조
3.5. 출력층 설계
- 기계학습 종류에 따른 활성화 함수 채택 : 분류는 소프트맥스 함수를, 회귀는 항등함수를 주로 사용
- 항등함수(identity function) : 입력을 그대로 출력(입력=출력)
- 소프트맥스 함수(softmax function) : 출력층의 각 뉴런이 모든 입력신호에서 영향을 받음
1) 상세 구현은 하단 링크 참조
2) 지수 함수의 값이 매우 커 오버플로가 발생할 수 있음. 아래 수식을 통해 오버플로를 해결. C′으로 주로 입력 신호의 최댓값을 사용

3) 소프트맥스 함수 출력의 총합은 항상 1이므로, 출력을 확률로 해석 가능
4) 소프트맥스 함수를 적용해도 각 원소의 대소관계 변하지 않음
3.6. 손글씨 숫자 인식
신경망의 과정
1. 학습 : 훈련(학습)데이터로 가중치 매개변수를 학습
2. 추론 : 학습한 매개변수를 이용해 입력 데이터를 분류
- MNIST 데이터셋
1) 손글씨 숫자 이미지 집합으로, 0~9까지의 숫자 이미지를 가짐
2) MNIST 데이터셋을 내려받아 이미지를 넘파이 배열로 변환해주는 파이썬 스크립트(하단 링크 참조)
3) MNIST 구조 및 load_mnist()함수 사용, 신경망의 추론 처리하기(하단 링크 참조)
원-핫인코딩(one-hot encoding) : 정답을 뜻하는 원소만 1이고(hot) 나머지는 0인 배열
pickle(피클) : 프로그램 실행 중 특정 객체를 파일로 저장하는 기능. 로드 시 실행 당시의 객체를 즉시 복원 가능.
정규화(nomalization) : 데이터를 특정 범위로 변환하는 처리
전처리(pre-processing) : 신경망의 입력 데이터에 특정 변환을 가하는 것
- 배치 처리
1) 배치(batch) : 하나로 묶은 입력 데이터
2) 큰 배열을 한꺼번에 계산하는 것이 분할된 작은 배열 여러번 계산하는 것보다 빠름.
3) 100장 분량의 28X28 사이즈 MNIST 이미지의 경우, 아래 그림과 같음

3) 배치 처리 코드(하단 링크 참조)
참조 링크
밑바닥부터 시작하는 딥러닝 3장 소스 코드
MNIST 데이터셋을 numpy 배열로 변환하는 Python 스크립트