Data/개념 정리

[밑러닝 3] 제 4고지, 신경망 만들기 개념 정리

neulvo 2023. 1. 28. 08:43

37. 텐서를 다루다

p300. 한편 넘파이에는 브로드캐스트(broadcast)라는 기능이 있습니다. 만약 x와 c의 형상이 다르면 자동으로 데이터를 복사하여 같은 형상의 텐서로 변환해주는 기능입니다.

p301. 머신러닝 문제에서는 텐서를 입력받아 스칼라를 출력하는 함수(손실 함수 loss function)을 설정하는 것이 일반적입니다.

p303. 텐서의 미분을 머신러닝에서는 '기울기'라고 합니다.

 

야코비안 - 나무위키

사상 x:D(⊆R2)→R3{\bf x}: D(\subseteq\mathbb R^2)\to\mathbb R^3x:D(⊆R2)→R3가 다음과 같이 정의되어 있다고 하자.x(u, v)=(x(u, v), y(u, v), z(u, v)){\bf x}(u,\,v)=(x(u,\,v),\,y(u,\,v),\,z(u,\,v))x(u,v)=(x(u,v),y(u,v),z(u,v)

namu.wiki

p305. forward 모드는 n x n 행렬을 전파합니다. 그에 비해 reverse 모드에서는 n개의 벡터를 전파합니다. 그런데 행렬과 행렬의 곱보다 백터와 행렬의 곱 쪽의 계산량이 적습니다. 이런 이유로 reverse 모드, 즉 역전파 쪽의 계산 효율이 좋습니다.

38. 형상 변환 함수

p308. 계산을 원소별로 하지 않는 함수는 텐서의 형상을 고려해야 합니다. 그러면 역전파 구현이 명확해지죠. 구체적으로는 변수의 데이터와 기울기의 형상이 일치하는지 확인해야 합니다. 예를 들어 x가 Variable 인스턴스일 때 x.data.shape==x.grad.shape를 만족할 수 있도록 역전파를 구현합니다.

39. 합계 함수

40. 브로드캐스트 함수

41. 행렬의 곱

p336. dL/dxi는 xi를 (미세하게) 변화시켰을 때 L이 얼마나 변화하느냐를 뜻하는 '변화율'을 말합니다. 여기서 xi를 변화시키면 벡터 y의 모든 원소가 변화합니다. 그리고 y의 각 원소의 변화를 통해 궁극적으로 L이 변화하게 됩니다. 따라서 xi에서 L에 이르는 연쇄 법칙의 경로는 여러개 있고, 그 총합이 dL/dxi 입니다.

42. 선형 회귀

p342. x로부터 실숫값 y를 예측하는 것을 '회귀(regression)'라고 합니다. 그리고 회귀 모델 중 예측값이 선형(직선)을 이루는 것을 '선형 회귀'라고 합니다.

p343. 우리의 목표는 데이터에 맞는 직선 y = Wx+b를 찾는 것입니다. 그러기 위해서는 데이터와 예측치의 차이, 즉 '잔차(residual)'를 최소화해야 합니다.

p343. $L = \frac{1}{N}\sum_{i=1}^N(f(x_{i})-y_{i})^2$은 총 N개의 점에 대해 (xi, yi)의 각 점에서 제곱오차를 구한 다음 모두 더합니다. 그리고 평균을 구하기 위해 1/N을 곱합니다. 이 수식을 평균 제곱 오차(mean squared error)라고 합니다.

p343. 모델의 성능이 얼마나 '나쁜가'를 평가하는 함수를 손실 함수라고 합니다. 따라서 선형 회귀는 '손실 함수로 평균 제곱 오차를 이용한다'고 말할 수 있습니다.

p343. 우리의 목표는 손실 함수의 출력을 최소화하는 W와 b를 찾은ㄴ 것입니다. 기억하시겠지만, 바로 함수 최적화 문제입니다.

43. 신경망

p.351 y = F.matmul(x, W) + b 이와 같이 입력 x와 매개변수 W 사이에서 행렬 곱을 구하고, 거기에 b를 더합니다. 이 변환을 선형 변환(linear transformation) 혹은 아핀 변환(affine transformation)이라고 합니다.

선형 변환은 엄밀히 말하면 y = F.matmul(x,W) 까지로, b는 포함되지 않습니다. 그러나 신경망 분야에서는 b를 더하는 계산까지 포함하는 연산을 선형 변환이라고 부르는 것이 일반적입니다. 그리고 선형 변환은 신경망에서는 완전연결계층(fully connected layer)에 해당하며, 매개변수 W는 가중치(weight), 매개변수 b는 편향(bias)라고 합니다.

p355. 선형 변환은 이름 그대로 입력 데이터를 선형으로 변환해줍니다. 한편 신경망은 선형 변환의 출력에 비선형 변환을 수행합니다. 이 비선형 변환을 활성화 함수(activation function)라고 하며, 대표적으로 ReLU 함수와 시그모이드 함수(sigmoid function)등이 있습니다.

 

딥러닝 - 활성화 함수(Activation) 종류 및 비교

# 활성화 함수 딥러닝 네트워크에서 노드에 입력된 값들을 비선형 함수에 통과시킨 후 다음 레이어로 전달...

blog.naver.com

p356. 신경망에서는 선형 변환이나 활성화 함수 등에 의한 변환을 층(layer)이라고 합니다. 또한 선형 변환과 같이 매개변수가 있는 층 N개가 연속으로 이어져 N번의 변환을 수행하는 구조를 'N층 신경망'이라고 합니다.

44. 매개변수를 모아두는 계층

p361. 매개변수는 경사하강법 등의 최적화 기법에 의해 갱신되는 변수입니다.

45. 계층을 모아두는 계층

p372. yield를 사용한 함수를 제너레이터(generator)라고 합니다. 제너레이터를 사용하여 또 다른 제너레이터를 만들고자 할 때는 yield from을 사용합니다.

p374. 모델은 '사물의 본질을 단순하게 표현한 것'이라는 뜻인데, 머신러닝에서 사용되는 모델도 마찬가지입니다. 복잡한 패턴이나 규칙이 숨어 있는 현상을 수식을 사용하여 단순하게 표현한 것을 말하죠.

46. optimizer로 수행하는 매개변수 갱신 

p383. SGD는 확률적 경사하강법(Stochastic Gradient Descent)의 약자입니다. 여기에서 말하는 '확률적'은 대상 데이터 중에서 무작위로(확률적으로) 선별한 데이터에 대해 경사하강법을 수행한다는 뜻입니다. 딥러닝에서는 이처럼 원래의 데이터에서 무작위로 골라 경사하강법을 수행하는 것이 일반적입니다.

47. 소프트맥스 함수와 교차 엔트로피 오차

p391. 이번 코드 예시에서는 신경망의 출력이 단순한 '수치'인데, 이 수치를 '확률'로 변환할 수 있습니다. 이 일을 해주는 것이 소프트맥스 함수(softmax function)입니다.

p393. 선형 회귀에서는 손실 함수로 평균 제곱 오차를 이용했습니다. 하지만 다중 클래스 분류에 적합한 손실 함수는 따로 있습니다. 흔히 교차 엔트로피 오차(cross entropy error)를 사용하며, 다음 식으로 정의됩니다.

p393. 정답 데이터의 각 원소는 정답에 해당하는 클래스면 1로, 그렇지 않으면 0으로 기록되어 있습니다. 이러한 표현 방식을 원핫 벡터(one-hot vector)라고 합니다. 벡터를 구성하는 어려 원소 중 한 원소만 핫하다(값이 1이다)는 뜻입니다.

 

06-09 소프트맥스 회귀(Softmax Regression)

앞서 로지스틱 회귀를 통해 2개의 선택지 중에서 1개를 고르는 이진 분류(Binary Classification)를 풀어봤습니다. 이번에는 3개 이상의 선택지 중에서 1개를 고르…

wikidocs.net

p394. 이때 log 함수에 0을 건네면 오류(정확하게는 경고)가 발생하므로, 이를 방지하기 위해 값이 0이면 1e-15라는 작은 값으로 대체합니다. 이 일을 해주는 것이 clip 함수입니다. clip 함수는 clip(x, x_min, x_max) 형태로 사용하는데, x(Variable 인스턴스)의 원소가 x_min 이하이면 x_min으로 변환하고, x_max 이상이면 x_max로 변환해줍니다.

48. 다중 클래스 분류

p399. '에포크epoch'는 일종의 단위를 나타냅니다. 준비된 데이터셋을 모두 사용했을 때 (모두 '살펴봤을' 때)가 1에포크입니다.

49. Dataset 클래스와 전처리

p406. BigData 클래스를 초기화할 때는 데이터를 아직 읽지 않고, 데이터에 접근할 때 비로소 읽게 하는 것입니다.

50. 미니배치를 뽑아주는 DataLoader

p412. for문에서 리스트의 원소를 꺼낼 때 내부적으로(사용자에게 보이지 않는 곳에서) 반복자가 이용됩니다. 예를 들어 t=[1,2,3]일 때 for x in t:x를 실행하면 리스트 t가 내부적으로 반복자로 변환됩니다.

p414. 'Dataset 인터페이스를 만족하는 인스턴스'란 __getitem__ 과 __len__ 메서드를 구현한 클래스로부터 생성된 인스턴스를 말합니다.

p419. 과대적합ovrefitting은 특정 훈련 데이터에 지나치게 최적화된 상태를 말합니다. 따라서 새로운 데이터에서는 예측 정확도가 훨씬 떨어지는, 달리 표현하면 일반화되지 못한 상태를 뜻합니다. 신경망으로는 표현력이 높은 모델을 만들 수 있기 때문에 과대적합이 흔히 일어납니다.

51. MNIST 학습

728x90