본문 바로가기
Study/DL

[밑시딥1] Chapter 3. 신경망

by hyeon827 2024. 1. 9.

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 함수 사용
  • 넘파이의 다차원 배열을 잘 사용하면 신경망을 효율적으로 구현 가능
  • 기계학습 문제는 크게 회귀와 분류로 나뉨
  • 출력층의 활성화 함수로는 회귀에서는 주로 항등 함수, 분류에서는 주로 소프트맥스 함수 이용
  • 분류에서는 출력층의 뉴런 수를 분류하려는 클래스 수와 같게 설정
  • 입력 데이터를 묶은 것을 배치라 하며, 추론 처리를 이 배치 단위로 진행하면 결과를 훨씬 빠르게 얻을 수 있음