본문 바로가기
  • 철은 두드릴수록 강해지고 사람은 굴릴수록 강해진다.
IT

[케라스 창시자에게 배우는 딥러닝 2판] 1일차(2장)

by jangddu 2023. 5. 29.

출처: https://github.com/gilbutITbook/080315

지난 '밑바닥에서 시작하는 딥러닝' 챕터 공부 정리를 처음부터 다시 하려니까 시간이 오래 걸린다.

그래서 이번 공부는 냅다 공부하는 도중에 블로그 글 올릴 생각으로 정리하면서 공부했다.

(물론 잘 정리된 글은 아니고 나만 알아보기 편한 글일 수도 있다.) 내가 추가로 덧붙인 것, 순서를 바꾼 것도 있다.

냅다 2장부터 ㄱㄱ

 

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

2.1 신경망과의 첫 만남

  • 1980년대 미국 국립표준기술연구소의 MNIST 데이터셋으로 살펴볼 것임.
  • 훈련세트 6만장, 테스트세트 1만장 보유
  • 머신러닝에서 분류 문제의 범주(category)를 **클래스(class)**라고 하고 특정 샘플의 클래스를 **레이블(label)**이라고 한다.
  • shape사용하면 data의 shape가 나온다.
train_images.shape

→ (60000, 28, 28)

  • 신경망의 핵심 구성 요소는 층(layer)이다. 필터(filter)라고도 한다. 층은 주어진 문제에 더 의미 있는 표현(expresentation)을 입력된 데이터로부터 추출하는 것
  • 이 예의 신경망은 완전 연결(fully connected) 신경층 Dense 2개로 구성됨
  • 두 번째 층은 소프트맥스(softmax) 분류 층이다.
  • 옵티마이저: SGD, Momentum, Adagrad, Adam, RMS프롬
  • 손실함수: MSE, MAE, (이진) 교차 엔트로피, 카테고리 엔트로피(다중), 힌지 손실, SVM, softmax, KL-발산,Triplet Loss
  • 모니터링 지표: 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 점수(F1 Score), AUC-ROC, R 결정계수, MAE, RMSE
  • 테스트 세트의 정확도와 훈련 세트의 정확도에 차이가 있는 이유: 과대적합

 

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

  • 텐서(tensor): 다차원 넘파이 배열에 데이터를 저장하는 것이다. 데이터를 위한 컨테이너, 수치형 데이터를 다룬다. **차원(dimension), 축(axis), 랭크(rank)**라고도 한다.
  • ndim 사용하면 랭크가 몇인지 나온다.
  1. 스칼라(랭크0 텐서)

: 하나의 숫자만 담고 있는 텐서

  1. 벡터(랭크1 텐서)

: 숫자의 배열

  1. 행렬(랭크2 텐서)

: 벡터의 배열. 행렬로 이루어짐. (샘플축, 특성축)

  1. 랭크 3 텐서

: 위의 행렬들을 하나의 새로운 배열로 합침. 시계열 데이터(날짜(증가가능) 샘플수, 특성축)

  1. 랭크 4 텐서

: 위의 행렬들을 하나의 새로운 배열로 합침. 이미지 데이터 (샘플수, 높이, 넓이, 채널수)

  1. 랭크 5 텐서

: 위의 행렬들을 하나의 새로운 배열로 합침. 비디오 데이터 (샘플수, 시간, 높이, 넓이, 채널수)

  • 핵심속성: 축의 개수(랭크), 크기(shape), 데이터 타입(dtype)
  • 슬라이싱(Slicing): 배열에 있는 특정 원소들을 선택하는 것 이부분 설명이 이상하다(70p)
train_images[10:100]

→ 11번째에서 101번째까지 선택 (101번째는 포함하지 않고)

→ 라고 설명되어있는데 이게 아니라 10인덱스에서 99인덱스까지이므로 11번째부터 100번째까지임(100번째는 포함하지 않음)

  • 데이터 텐서의 첫번째 축은 샘플 축이다. 배치 축, 배치 차원이라고도 함.

 

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

  • 텐서 연산이란? 텐서 곱셈, 텐서 덧셈 등을 말함 → 선형대수학과 관련됨
  • 원소별 연산: 렐루 함수, 덧셈
  • 브로드캐스팅: 크기가 맞지 않는 텐서의 연산은 작은 텐서가 큰 텐서에 맞춰 변형하고 연산
  • 텐서 곱셈(접곱dot): 원소 개수가 같은 벡터끼리의 접곱 행렬-벡터 접곱은 벡터, 벡터-벡터의 접곱은 스칼라, 행렬-행렬 접곱은 행렬이 나옴
  • 탠소 크기 변환: reshape사용. 전치(transposition)를 많이 사용.행렬 변환
  • 텐선연산의 기하학적연산: 이동, 회전, 크기 변경, 선형 변환, 아핀 변환(선형변환+이동)

 

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

  • 훈련의 과정(훈련 반복 루프)
  1. 훈련 샘플과 타겟의 배치를 추출
  2. 샘플을 사용하여 모델 실행(정방향패스)하고 예측값 구하기
  3. 예측값과 타깃값의 차이를 측정하여 이 배치에 대한 모델의 손실 계산
  4. 모델 파라미터에 대한 손실 함수의 그레디언트 계산(역방향 패스).
  5. 그레디언트의 반대 방향으로 파라미터 조금 이동 ex = W -= a * gradient
  • 경사하강법이란 모델의 가중치를 손실이 감소하는 방향으로 이동시키는 것
  • 손실이 감소하는 방향을 계산하기 위해서 그레디언트를 사용
  • 그레디언트란? 텐서 연산의 도함수다 기울기라고 생각하면 됨
  • 텐서 함수의 그레디언트는 해당 함수의 다차원 표면의 곡률을 나타냄
  • 함수를 미분할 수 있다는 것은 f(x)의 값을 최소화할 수 있는 x값을 찾는 작업인 최적화가 가능하다는 것이다
  • 도함수는 어떤 함수의 정의역 속 각 점에서 함숫값의 변화량

→ f(x) 를 미분한 값.

  • 편도함수는 독립변수가 2개 이상인 다변수함수에서의 도함수를 의미

→ f(x) = x+y일 때 x에 대해서 미분(y상수처리), y에 대해서 미분한 값(x상수처리)

  • 점 W0에서 f의 도함수는 W와 크기가 같은 텐서 grad(loss_value, W0)이다.
  • 텐서 grad(loss_value, W0)가 W0에서 함수 f(W) = loss_value의 그레디언트다
  • grad(loss_value, W0)란? f(x) = loss_value가 가장 가파르게 상승하는 방향과 이 방향의 기울기를 나타내는 텐서다.
  • 최적화 방법(옵티마이저): 미니 배치 확률적 경사 하강법, 배치 경사 하강법(정확한 업데이트, 더 많은 비용), 모멘텀 이용한 SGD, Adagrad, RMSProp 등
  • 신경망의 그레디언트 값을 계산하는데 연쇄법칙(Chain rule) 적용하는 것이 역전파 알고리즘
  • 99, 100p. 이해를 위해선 https://www.youtube.com/watch?v=GEdLNvPIbiM 참고

 

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

현재까지 살펴본 코드

코드는 공식 깃헙 참고: https://github.com/gilbutITbook/080315