- 텐서 : 데이터를 표현하는 단위
4.1.1 Scalar
- 스칼라 = 상숫값
- torch 모듈에 내장된 메서드 (스칼라 사칙연산)
4.1.2 Vector
- 백터 : 하나의 값을 표현할 때 2개 이상의 수치로 표현한 것
- torch 모듈에 내장된 메서드(벡터 사칙연산)
4.1.3 Matrix
- 행렬 : 2개 이상의 벡터 값을 통합해 구성된 값
- 벡터 값 간 연산 속도를 빠르게 진행할 수 있는 선형 대수의 기본 단위
- torch 모듈에 내장된 메서드 (행렬 값 간 사칙연산)
- A.mul(B) : A행렬과 B행렬 간 원소별 곱
- A.matmul(B) : A행렬과 B행렬의 행렬곱
4.1.4 텐서
- 텐서 : 2차원 이상의 배열
- torch 모듈에 내장된 메서드(텐서)
- (행렬곱)
- [ [(1*9) + (2*11)] , [(1*10) + (2*12)], [(5*13) + (6*15)], [(5*14) + (6*16)],
- [(3*9) + (4*11)], [(3*19) + (4*12)], [(7*13) + (8*15)], [(7*14) + (8*16)] ]
4.2 Autograd
- PyTorch에서 Back Propagation을 이용해 파라미터 업데이트하는 방법은 Autograd 방식으로 쉽게 구현
- cuda.is_available() : 현재 파이썬 환경에서 torch module을 이용할 때 GPU를 이용해 계산 가능한지 파악
- 참이면 'cuda' 장비 이용, 거짓이면 'cpu' 장비 이용
BATCH_SIZE(=64)
- Input 데이터 64개
- BATCH_SIZE 수만큼 계산된 오찻값을 평균내 Back Propagation을 적용 -> 파라미터 업데이트
INPUT_SIZE(=1000)
- Input의 크기이자 입력층 노드 수
- 1000 크기의 벡터 값을 64개 이용 -> (64,1000)
HIDDEN_SIZE(=100)
- 입력층에서 은닉층으로 전달됐을 때 은닉층의 노드 수
- (64,1000)의 Input들이 (1000,100) 크기의 행렬과 행렬 곱 계산
OUTPUT_SIZE(=10)
- 딥러닝 모델에서 최종으로 출려되는 값의 벡터의 크기
- 최종으로 비교하고자 하는 레이블의 크기와 동일
(1)
- randn : 평균이 0, 표준편차가 1인 정규분포에서 샘플링한 값(= 데이터를 만들겠다)
- x -> (64,1000) 모양의 데이터 생성
- 미리 설정한 DEVICE를 이용해 계산
- 데이터 형태는 float
- requires_grad =False (Input에 대해 Gradient를 하는 것이 아니기 때문)
(2)
- Output 역시 BATCH_SIZE 수만큼 결과값 필요
- Output과의 오차를 계산하기 위해 크기를 '10'으로 설정
- 나머진 Input 설정과 동일
(3)
- 업데이트 할 파라미터 값 설정
- Input 데이터와 행렵 곱을 하기 위해 행의 값이 1,000
- 행렬 곱을 이용해 100 크기의 데이터를 생성하기 위해 (1000,100) 크기 데이터 생성
- requires_grad = True (Gradient를 게산할 수 있도록 설정)
(4)
- w1과 x의 행렬 곱 -> (64,100)
- (100,10) 행렬을 통해 '10' 크기의 Output이 나오도록 설정
- w2 역시 Back Propagation을 통해 업데이트 해야될 대상 -> requires_grad = True
(1)
- Learning Rate
- Gradient를 계산한 결괏값에 1보다 작은 값을 곱해 파라미터 업데이트
- 파라미터 값 업데이트에 있어 가장 중요한 하이퍼파라미터
(2)
- 500번 반복해 파라미터값 업데이트
- x와 w1 행렬곱 결과값을 clamp라는 메서드를 이용해 비선형 함수 적용
- clamp는 비선형 함수 ReLU()와 같은 역할(최솟값이 0이며 0보다 큰 값은 자기 자신을 갖음)
(3)
- 예측값(y_pred)과 실제 레이블(y)의 차이값 계산(=loss)
- pow(2) 이용해 제곱 후 sum()
- t(반복 횟수)r가 100으로 나누어 떨어질 때 반복문 횟수와 Loss 값 출력
- Loss 값에 대해 backward() 메서드 이용 -> 각 파라미터에 대한 Gradient를 계싼하고 이를 통해 Back Propagation
(4)
- 파라미터 값을 업데이트할 때에는 해당 시점의 Gradient 고정한 후 업데이트
- w1.grad, w2.grad에 learning_rate를 곱한 결괏값을 각각 w1,w2에서 빼줌(Loss 값이 최소로 되는 지점을 찾기 위해 뺌)
- 파라미터 값 업데이트 후 각 파라미터의 Gradient를 초기화 해 다음 반복문 진행할 수 있도록 Gradient를 0으로 설정
결과
- 500번의 반복문을 실행하면서 Loss 값이 줄어드는 것을 확인
- Input이 w1과 w2를 통해 계산된 결괏값과 y값이 점점 비슷해진다는 의미
'Study > DL' 카테고리의 다른 글
[밑시딥1] Chapter 5. 오차역전파법 (0) | 2024.01.10 |
---|---|
[밑시딥1] Chapter 4. 신경망 학습 (1) | 2024.01.09 |
[밑시딥1] Chapter 3. 신경망 (2) | 2024.01.09 |
[밑시딥1] Chapter 2. 퍼셉트론 (1) | 2024.01.09 |
[모두를 위한 딥러닝 시즌2] lab 1-1,1-2,8-1,8-2 (2) | 2024.01.09 |