2장. 신경망의 수학적 구성 요소

[케라스 창시자에게 배우는 딥러닝] 교재를 바탕으로 작성되었습니다.

 

케라스 창시자에게 배우는 딥러닝: 파이썬과 케라스(keras)로 배우는 딥러닝 핵심 원리

 단어 하나, 코드 한 줄 버릴 것이 없다!창시자의 철학까지 담은 딥러닝 입문서케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. ...

www.google.com

 

2.1 신경망과의 첫 만남

2.2 신경망을 위한 데이터 표현

2.3 신경망의 톱니바퀴 : 텐서 연산

2.4 신경망의 엔진 : 그래디언트 기반 최적화

2.5 첫 번째 예제 다시 살펴보기

2.6 요약


2.1 신경망과의 첫 만남

  • 클래스(class) : 분류 문제의 범주(category)
  • 샘플(sample) : 데이터 포인트
  • 레이블(label) : 특정 샘플의 클래스

 

  • 층(layer) : 일종의 데이터 처리 필터, 주어진 문제에 더 의미있는 표현(representation)을 입력된 데이터로부터 추출

-> 딥러닝 모델 : 데이터 정제 필터(층)가 연속되어 있는 데이터 프로세싱을 위한 여과기

 

 

신경망이 훈련 준비를 마치기 위한 컴파일 단계

  • 손실 함수(loss function) : 훈련 데이터에서 신경망의 성능을 측정하는 방법, 네트워크가 옳은 방향으로 학습될 수 있도록 도와줌
  • 옵티마이저(optimizer) : 입력된 데이터와 손실 함수를 기반으로 네트워크를 업데이트하는 메커니즘
  • 훈련과 테스트 과정을 모니터링할 지표 : 정확도(정확히 분류된 이미지의 비율), ...

2.2 신경망을 위한 데이터 표현

텐서(tensor) : 데이터를 위한 컨데이너(container), 임의의 차원(dimension, 축(axis)) 개수를 가지는 행렬의 일반화된 모습

 

1. 스칼라 (0D 텐서) : 하나의 숫자만 담고 있는 텐서

  • float32/ float64 타입의 숫자
  • (ndim == 0), 축 개수(랭크(rank)) = 0

 

2. 벡터 (1D 텐서) : 숫자의 배열 (벡터(vector))

  • 하나의 축

 

3. 행렬 (2D 텐서) : 벡터의 배열 (행렬(matrix))

  • 2개의 축 (행(row)과 열(column))
  • 첫 번째 축에 놓여 있는 원소(행), 두 번째 축에 놓여 있는 원소(열)


텐서의 3가지 핵심 속성

  • 축의 개수(랭크) : ndim
  • 크기(shape) : 텐서의 각 축을 따라 얼마나 많은 차원이 있는지를 나타낸 파이썬의 튜플(tuple)
  • 데이터 타입 : 텐서에 포함된 데이터의 타입

 

- 슬라이싱(slicing) : 배열에 있는 특정 원소들을 선택하는 것


배치 데이터

- 샘플 축(sample axis), 샘플 차원(sample dimension) : 모든 데이터 텐서의 첫 번째 축

- 딥러닝 모델은 한 번에 전체 데이터셋을 처리하지 않고 데이터를 작은 배치(batch)로 나누어 처리함

-> 첫 번째 축(0번 축)을 배치 축(batch axis) 또는 배치 차원(batch dimension)이라고 부름

 


텐서의 실제 사례

  • 벡터 데이터 : (samples, features) 크기의 2D 텐서
  • 시계열 데이터/시퀀스(sequence) 데이터 : (samples, timesteps, features) 크기의 3D 텐서
  • 이미지 : (samples, height, width, channels) 또는 (samples, channels, height, width) 크기의 4D 텐서
  • 동영상 : (samples, frames, height, width, channels) 또는 (samples, frames, channels, height, width) 크기의 5D 텐서

1. 벡터 데이터

- 하나의 데이터 포인트가 벡터로 인코딩

- (samples, features) 크기의 2D 텐서

- 첫 번째 축은 샘플 축, 두 번째 축은 특성 축


2. 시계열 데이터 / 시퀀스 데이터

- (samples, timesteps, features) 크기의 3D 텐서

- 시간 축은 항상 두 번째 축(인덱스가 1인 축)


3. 이미지 데이터

- (samples, height, width, channels) 또는 (samples, channels, height, width) 크기의 4D 텐서

- 흑백 이미지는 하나의 컬러 채널만을 가지고 있어 2D 텐서로 저장될 수 있지만, 관례상 이미지 텐서는 항상 3D로 저장됨 (채널의 차원 크기 = 1)

 

이미지 텐서의 크기를 지정하는 2가지 방식

  • 채널 마지막(channel-last) 방식 : 구글의 텐서플로 머신 러닝 프레임워크 (samples, height, width, color_depth) 
  • 채널 우선(channel-first) 방식 : 씨아노 (samples, color_depth, height, width)

 

4. 비디오 데이터

- (samples, frames, height, width, channels) 또는 (samples, frames, channels, height, width) 크기의 5D 텐서

- 컬러 이미지 > 프레임 > 비디오

- 프레임(3D) > 프레임의 연속(4D) > 여러 비디오의 배치(5D)


2.3 신경망의 톱니바퀴 : 텐서 연산 (tensor operation)

keras.layers.Dense(512, activation='relu')

2D 텐서를 입력받고, 또 다른 2D 텐서를 반환하는 함수

output = relu(dot(W, input) + b)

W는 2D 텐서, b는 벡터

  • 입력 텐서와 텐서 W 사이의 점곰(dot)
  • 점곱의 결과인 2D 텐서와 벡터 b 사이의 덧셈(+)
  • relu(렐루) 연산

 

1. 원소별 연산(element-wise operaion)

: 텐서에 있는 각 원소에 독립적으로 적용됨

 

브로드캐스팅(broadcasting)

: 두 행렬 A, B 중 크기가 작은 행렬을 크기가 큰 행렬과 모양(shape)이 맞게끔 늘려주는 것

  • 큰 텐서의 ndim에 맞도록 작은 텐서에 (브로드캐스팅 축이라고 부르는) 축이 추가됨
  • 작은 텐서가 새 축을 따라서 큰 텐서의 크기에 맞도록 반복됨

 

2. 점곱 연산(dot operation) , 텐서 곱셈(tensor product)

: 원소별 연산과 반대로 입력 텐서의 원소들을 결합시킴

 

 

3. 텐서 크기 변환(tensor reshaping)

: 특정 크기에 맞게 열과 행을 재배열하는 것 (원래 텐서와 원소 개수 동일)

ex. 전치(transposition) : 행과 열을 바꾸는 것


2.4 신경망의 엔진 : 그래디언트 기반 최적화

output = relu(dot(W, input) + b)
  • 텐서 W와 b는 층의 속성
  • 가중치(weight) 또는 훈련되는 파라미터(trainable parameter)
  • 커널(kernel)과 편향(bias)

 

- 가중치에는 훈련 데이터를 신경망에 노출시켜서 학습된 정보가 담겨있음

 

훈련 반복 루프(training loop)

  1. 훈련 샘플 x와 이에 상응하는 타깃 y의 배치를 추출
  2. x를 사용하여 네트워크를 실행하고(정방향 패스(forward pass) 단계), 예측 y_pred를 구함
  3. y_pred와 y의 차이를 측정하여 이 배치에 대한 네트워크의 손실 계산
  4. 배치에 대한 손실이 조금 감소되도록 네트워크의 모든 가중치를 업데이트

 

  • 변화율(derivative)과 그래디언트(gradient)
  • 확률적 경사 하강법
  • 변화율 연결 : 역전파 알고리즘