3.1 퍼셉트론에서 신경망으로
- 입력층, 출력층, 은닉층으로 구성
- 은닉층의 뉴런은 사람 눈에 보이지 않음 (입력층,출력층과 달리)
- 입력층 -> 0층, 은닉층 -> 1층, 출력층 -> 2층
- 가중치를 갖는 층은 2개뿐 = '2층 신경망'
3.2 활성화 함수
- 입력 신호의 총합을 출력 신호로 변환하는 함수
- a = 가중치가 달린 입력신호 + 편향
- a를 활성화 함수 h( )에 넣어 y 출력
- 계단함수 = 임계값을 경계로 출력이 바뀌는 활성화 함수
- 퍼셉트론에서 사용
- 시그모이드 함수 (신경망에서 자주 이용)
- 부드러운 곡선이며 입력에 따라 출력이 연속적으로 변화
- 즉, 연속적인 실수(0.731...., 0.880..... 등) 출력
[계단함수와 시그모이드 함수 공통점]
- 입력이 중요하면 큰 값 출력, 중요하지 않으면 작은 값 출력
- 비선형 함수
[신경망에서 활성화 함수로 비선형 함수를 사용해야 되는 이유]
- 선형 함수의 문제는 '은닉층이 없는 네트워크'로도 똑같은 기능
- 선형 함수로는 여러 층으로 구성하는 이점을 살릴 수 X
- ReLU 함수 (최근 주로 이용)
- 입력이 0을 넘으면 입력 그대로 출력, 0 이하면 0을 출력
3.3 3층 신경망 구현하기
- 1층의 1번째 뉴런
- 1층의 '가중치 부분'을 행렬의 곱으로 간소화
- 활성화 함수 h( )로 변환된 신호를 z로 표기
- 입력층에서 1층으로의 신호 전달
- 1층에서 2층으로의 신호 전달
- 2층에서 출력층으로의 신호 전달
- 출력층의 활성화 함수는 은닉층의 활성화 함수와 다름
- 3층 출력층 가중치 계산을 행렬로 표현
- 3층 신경망 구현 정리 (코드)
3.4 출력층 설계하기
- 신경망은 분류와 회귀 모두에 이용
- 다만 둘 중 어떤 문제냐에 따라 출력층이 사용하는 활성화 함수 다름
- 일반적으로 회귀에는 항등 함수, 분류에는 소프트맥스 함수
[항등함수]
- 입력을 그대로 출력
[소프트맥스 함수]
- exp(x): 지수 함수
- n: 출력층의 뉴런 수
- yk: 그 중 k번째 출력
- 모든 입력 신호로부터 화살표를 받음
- 소프트맥스 함수 오버플로 문제 개선
- C' 에 입력 신호 중 최대값을 이용하는 것이 일반적
- 소프맥스 함수의 출력은 0과 1 사이의 실수 ('확률'로 해석)
- 출력 총합은 1
- 각 원소의 대소 관계는 변하지 X (분류 문제 시 소프트맥스 함수 생략 해도 됨)
[출력층 뉴런 수 정하기]
- 분류에서는 분류하고 싶은 클래스 수로 설정
3.6 손글씨 숫자 인식
- MNIST (손글씨 숫자 이미지 집합)
- 이미지 크기 28 X 28 = 784 (입력층 뉴련 784개)
- 0~9까지의 숫자 분류 (출력층 10개)
- 은닉층의 임의로 정함 (책에서는 50과 100)
- softmax 함수 사용 (분류 문제)
[배치 처리]
- x에 이미지 데이터를 1장만 입력
- y에는 원소가 10개인 1차원 배열이 저장
- 하나로 묶은 입력 데이터 = '배치'
- x에 이미지 100장 분량의 데이터를 한꺼번에 입력
- 출력데이터 형상은 100 X 10
[정리]
- 신경망에서는 활성화 함수로 시그모이드 함수와 ReLU 함수 사용
- 넘파이의 다차원 배열을 잘 사용하면 신경망을 효율적으로 구현 가능
- 기계학습 문제는 크게 회귀와 분류로 나뉨
- 출력층의 활성화 함수로는 회귀에서는 주로 항등 함수, 분류에서는 주로 소프트맥스 함수 이용
- 분류에서는 출력층의 뉴런 수를 분류하려는 클래스 수와 같게 설정
- 입력 데이터를 묶은 것을 배치라 하며, 추론 처리를 이 배치 단위로 진행하면 결과를 훨씬 빠르게 얻을 수 있음
'Study > DL' 카테고리의 다른 글
[밑시딥1] Chapter 5. 오차역전파법 (0) | 2024.01.10 |
---|---|
[밑시딥1] Chapter 4. 신경망 학습 (1) | 2024.01.09 |
[밑시딥1] Chapter 2. 퍼셉트론 (1) | 2024.01.09 |
[모두를 위한 딥러닝 시즌2] lab 1-1,1-2,8-1,8-2 (2) | 2024.01.09 |
[파이썬 딥러닝 파이토치] Part 1. Pytorch 기초 (1) | 2024.01.09 |