게시글
질문&답변
2024.10.16
9-2 fully connected NN
안녕하세요!좋은 질문 감사합니다!네 Sigmoid을 통과한 logit은 각각 0~1 사이의 값을 가지지만 logit 값들의 합은 1이 되지 않습니다!따라서 예측 확률값으로 변환하기 위해서 Softmax 함수를 사용했습니다!
- 1
- 1
- 28
질문&답변
2024.09.25
Mini-batch Gradient Descent computation time 질문
안녕하세요!좋은 질문해주셔서 또 한번 감사드립니다!네 정확합니다!만약에 GPU에 올릴 수 있는 최대 데이터양이 100개라면 최대로 한번에 병렬 처리할 수 있는 데이터양도 100개가 한계입니다. 따라서 500개의 데이터 샘플들을 처리하기 위해서는 100개로 구성된 미니배치 5개를 차례대로 순회해야합니다.반면에 GPU에 올릴 수 있는 데이터양 (즉 100개) 에 한해서는 샘플 하나하나씩 차례대로 계산하지 않아도 되기 때문에 Mini-batch을 구성하는 데이터 수에 대해서는 연산 소요 시간이 비례하지 않습니다!
- 1
- 2
- 45
질문&답변
2024.09.25
Huber Loss에 대한 질문
안녕하세요! 강의를 재밌게 봐주시고 계셔서 다행이고 저도 보람되네요!Question:왜 전미분이 1번만 된다는 게 단점이 된다는 것인지 이해가 잘 되지 않습니다.Answer: 넵, 47번째 참고 사항 슬라이드에서 설명드리게 되는데,미분가능함”은 해당 함수가 Smooth (매끄럽다)고 Well-behaved (얌전하다)는 의미를 가집니다.즉, 함수의 출력값이 입력값의 변화에 따라 “매끄럽고 부드럽게” 변한다는 의미입니다.매끄럽고 부드러울수록 함수를 extrapolate, interpolate하기 수월해집니다.딥러닝 모델도 어떻게 보면 함수를 잘 근사하도록 학습하는 것이기 때문에매끄럽고 부드러운 함수일 수록 학습 과정에서 보지 못한 input data space에 대해서 interpolate 혹은 extrapolate할 수 있게 됩니다!따라서, 전미분이 1번만 가능한 Huber Loss을 사용하는 것은 "경사하강에 필요한 미분값을 구하는데는 전혀 지장이 없습니다.하지만 (여러번 미분 가능한) 매끄러운 손실 함수는 딥러닝 모델이 학습하는 Loss Surface가 더 매끄러워지게 되는 셈이고 더 안정적인 학습에 도움을 줍니다! (사진)Loss Surface에 대한 일러스트레이션으로 위 그림을 참고하시면 되겠습니다!왼쪽은 덜 매끄러운 Loss surface, 오른쪽은 더 매끄로운 Loss Surface로 보시면 되겠습니다!
- 1
- 2
- 57
질문&답변
2024.08.18
Batch size 가 극단적으로 작은 경우 (예를들어 batch_size =1) Normalization 적용 방안
안녕하세요!변정현입니다!강의가 도움이 되고 있다니 저도 많이 뿌듯하네요 ㅎㅎ좋은 질문 감사합니다~질문에 대한 답변은 아래 첨부 파일로 상세하게 설명드리겠습니다!요약하자면,Q: 하나의 batch 에 단일 샘플만 적용하는 경우를 study 하고 있는데요, Batch-Normalization 을 적용했을 경우 오히려 학습이 잘 안 되는 것 같다:A: 네 맞습니다! Mini-batch의 크기가 작으면 분모로 나눠주게 되는 표준편차가 매우 작은 값을 가지게 됩니다. 분모 값이 매우 작을 때는 분모 값이 조금만 바껴도 나눠진 값이 심하게 요동칩니다.따라서 normalize된 값은 심하게 요동치며 이로 인해서 학습 과정도 불안정해집니다. Q: "batch size 가 극단적으로 작은 경우에 Normalization layer 을 적용 안하는게 더 좋을 수 있나요? 혹은 설명해 주신 table 에 나와 있는 것 처럼 Group Normalization layer 나 Instance Normalization을 적용하는 것이 맞는가요?"A: 네 맞습니다! Mini-batch의 크기가 작을 때 Batch-Normalization 을 적용하면 더 잘 안되는 이유(사진)(사진) Group Normalization에 대한 부연 설명(사진)(사진)
- 2
- 1
- 93
질문&답변
2024.08.15
Normalization 질문
안녕하세요!좋은 질문 감사합니다!아래에 첨부한 그림 참고 부탁드립니다!그리고 x_nhwc은 scalar 값입니다! X 텐서의 n, h, w, c index에 해당되는 요소를 의미합니다!즉, n번째 데이터 샘플의, c번째 channel의, h 번째 height, w번째 width에 해당되는 값을 의미합니다!(사진)(사진)(사진)
- 1
- 2
- 139
질문&답변
2024.08.10
Section 7 [Activation Function의 종류] Softmax logit 분포와 Entropy 질문이 있습니다
안녕하세요!네 맞습니다! 예리하게 파악을 해주셔서 감사합니다! ㅎㅎ제가 만드는 과정에서 실수가 있었네요! 정정된 슬라이드는 다음과 같습니다!(사진)
- 1
- 1
- 80
질문&답변
2024.08.05
Section 3 [실습] PyTorch로 구현해보는 Loss Function의 Cross Entropy 구현 관련하여 질문이 있습니다.
안녕하세요 변정현입니다!네 말씀해주신 것처럼 예측값이 이미 SoftMax 함수로 0~1 사이의 값과 합이 1로 normalize되어 있어서 CE_loss에 있는 SoftMax 함수 (Exponential 취한 후 Exponential의 합으로 나누는 것) 를 별도로 또 취할 필요가 없습니다!제가 앞서서 정의한 예측값을 재활용하는 과정에서 혼선이 있었네요 ㅎㅎ잘 발견해주셔서 감사합니다!
- 1
- 1
- 135
질문&답변
2024.08.04
Section 3의 [이론] Regression task의 Loss: L1, L2, Huber, Log Cosh Loss "미분가능"관련 에서 질문이 있습니다.
안녕하세요!변정현입니다. 좋은 질문 감사합니다!MAE loss처럼 0에서 미분이 불가능 한 경우에는 gradient를 계산할 수 없는데 어떻게 해당 loss를 사용할 수 있는 것인가요?PyTorch에서 MAE Loss에 대해서는 Loss 값이 0일 때 경사는 0으로 근사합니다!따라서 엄밀히 말하면 Loss 값이 0일때는 미분값이 정의되지 않지만 PyTorch에서는 미분값으로 0이 출력되도록 구현되어 있습니다!(사진) 한 번만 미분 가능한 것보다 2번 이상 미분가능한 것의 장점이 무엇인가요?넵, 슬라이드 47에서 부연 설명드리는데, “미분가능함”은 해당 함수가 Smooth (매끄럽다) 하고 Well-behaved (얌전하다) 는 의미를 가집니다.즉, 함수의 출력값이 입력값의 변화에 따라 “매끄럽고 부드럽게” 변한다는 의미이고,매끄럽고 부드러울수록 함수를 extrapolate, interpolate하기 수월해집니다.딥러닝 모델도 어떻게 보면 함수를 잘 근사하도록 학습하는 것이기 때문에 매끄럽고 부드러운 함수일 수록 학습 과정에서 보지 못한 input data space에 대해서 interpolate 혹은 extrapolate할 수 있게 됩니다.
- 1
- 1
- 125
질문&답변
2024.08.03
Section 15 실습 중, lstm 클래스의 forward 함수 질문
안녕하세요 변정현입니다!먼저 질문에 대한 답변이 늦어진점 양해 부탁드립니다.좋은 질문 감사합니다! 제가 Sigmoid을 취하지 않은 이유는 torch.nn.LSTM 에서는 이미 output h_t은 sigmoid 함수의 값 o_t와 hyperbolic tangent 함수의 값 tanh(c_t)가 곱해졌기에, h_t의 각 요소는 -1 에서 1 사이의 값을 가집니다!따라서 h_t 혹은 h_t의 합에 sigmoid 값을 다시 취하게 되면 해당 값이 너무 작아지게 되므로 모델의 학습이 느려지는 문제가 발생합니다.(사진)(사진)
- 1
- 2
- 97
질문&답변
2024.07.22
Section 16 [이론] Transformer의 Encoder 질문
안녕하세요 변정현입니다!(96번째 슬라이드 참조)(사진)H는 기존의 attention의 query Q, key K, value V vector의 차원에 해당됩니다!(113번째 슬라이드 참조)(사진)그리고 M은 Multi-head attention의 Head의 개수입니다!참고로, Multi-head을 사용할때, 저희는 각 Head에 해당되는 query, key, value vector들의 크기는 H/M으로 설정하게 됩니다. 그 이유는 다음과 같습니다.Multi-head attention에서는 각 head가 output vector O_m을 하나씩 출력하게 됩니다.따라서 M개의 output vector O_m을 구하게됩니다.저희는 M개의 output vector들을 하나의 vector로 concatenation해서 최종 output vector인 O을 구하게 됩니다.하지만, Q, K, V의 차원의 크기를 H로 그대로 사용하게 되면 concatenation된 최종 output vector O의 크기는 M*H가 됩니다.그리고 Layer을 거듭할수록 M*H, M*M*H 이렇게 늘어나게 됩니다.따라서 최종 출력되는 O의 크기가 일정하게 유지하기 위해서 각 head의 Q, K, V의 차원 크기를 H/M으로 설정하는 것입니다!
- 1
- 1
- 83