
딥러닝 이론 + PyTorch 실무 완전 정복
₩284,900
초급 / 딥러닝, PyTorch, 컴퓨터 비전, NLP, transformer, CNN, RNN, LLM
4.9
(41)
딥러닝 현업에 종사하기 위해 필요한 딥러닝의 “핵심 개념”을 배우고 PyTorch을 활용한 실습을 통해서 실제 딥러닝 프로젝트를 수행하는데 필요한 실무를 가르쳐주는 강의입니다.
초급
딥러닝, PyTorch, 컴퓨터 비전
(현) ML Engineer @ MakinaRocks
(전) ML Engineer @ DearGen
(전) ML Engineer @ DeepBio
(전) Research Student @ UCL NLP Group, Streetbees
(전) Research Student @ ICL Photonics Lab
University College London (UCL): MSc in Machine Learning (머신러닝 석사) (학점: Distinction, GPA 4.0/4.0)
Imperial College London (ICL): BSc in Theoretical Physics (이론물리학 학사) (학점: First Class Honours, GPA 4.0/4.0)
5년차 Machine Learning Engineer입니다. (Google DeepMind가 출범하였고, Demis Hasabis가 박사과정을 한) University College London에서 머신러닝 석사를 전공하였습니다. 석사 때는 NLP에서 Knowledge Graph Embedding을 연구하였고, DeepBio에서는 Medical Diagnosis에 적용되는 Image Classification, Segmentation 딥러닝 모델들을 개발하였습니다. Deargen에서는 신약 개발의 Drug Target Interaction와 같은 문제 적용되는 GNN, RNN, Transformer 등등의 다양한 딥러닝 모델들을 적용한 경험이 있습니다. 현재 재직중인 MakinaRocks에서는 제조 현장의 로봇팔의 이상탐지에 적용되는 딥러닝 모델 및 머신러닝 시스템을 구축하고 있습니다.
질문&답변
[section 14 / [실습] 직접 만든 CNN 모델과 ResNet, VGGNet을 활용한 CV 프로젝트] transforms.Normalize 질문
안녕하세요!좋은 질문 감사합니다!mean과 std에 들어가있는 값들은 0~1 사이로 normalize (정규화)된 CIFAR 데이터셋의 각 채널별 평균과 표준편차 값들 입니다! 이미 계산되어 있는 값을 가져와서 사용한 것입니다.저희는 0~1 사이로 CIFAR 데이터셋을 정규화한 후, 정규화된 데이터셋이 평균이 0이 되고 표준편차가 1이 되도록 standardize (표준화)하고 싶습니다. 따라서 (X - mean) / std 로 각 채널별로 표준화하는 것입니다! (사진)
질문&답변
[section 14 / VGGNet ] receptive filed 질문
안녕하세요!변정현입니다.강의 자료에 오타가 있었네요. 죄송합니다.네 맞습니다! (3,3) conv layer 2개의 경우는 Receptive Field가 (5, 5)가 되는 것이 맞습니다!82 페이지는 다음과 같이 수정됩니다. 좋은 지적 감사합니다!(사진)
질문&답변
[섹션3, PyTorch로 구현해보는 Loss Function] 분류task loss함수 질문입니다.
안녕하세요좋은 질문 감사합니다!네 결론부터 말씀드리자면, nn.BCELoss와 nn.BCEWithLogitsLoss 모두 다중 분류 문제의 Loss 함수로 사용해도 괜찮습니다!제 실습 강의에서도 class 개수가 10인 예제를 사용해서 nn.BCELos와 nn.BCEWithLogitsLoss을 적용하였습니다.다만 주의할 점은 nn.BCELoss에서는 Ground Truth 값이 (batch_size, n_class) 크기의 one-hot-vector 로 입력되어야 한다는 것입니다.즉, nn.BCELoss에서는 모델이 예측한 확률값과 실제 정답(One-Hot Vector) 간의 비교가 이루어집니다.예를 들어, 클래스 개수가 3개이고, 하나의 데이터 샘플이 있다고 가정해보겠습니다.모델의 예측값: [0.8, 0.1, 0.1] (각 클래스에 대한 예측 확률)정답(One-Hot Vector): [1, 0, 0]이 경우, 첫 번째 클래스(0.8 vs 1), 두 번째 클래스(0.1 vs 0), 세 번째 클래스(0.1 vs 0) 이렇게 개별적으로 비교하면서 Binary Cross Entropy를 계산합니다.즉, 각 클래스마다 독립적으로 이진 분류 문제를 수행하는 것처럼 작동한다고 보면 됩니다!nn.BCEWithLogitsLoss도 기본적인 개념은 같습니다. 다만, sigmoid 활성화 함수를 내부적으로 포함하고 있어서 모델의 출력값을 바로 넣어도 된다는 차이가 있습니다. (nn.BCELoss는 예측값을 먼저 sigmoid를 거쳐야 합니다.)정리해보자면:nn.BCELoss & nn.BCEWithLogitsLoss → 다중 분류 문제에서도 사용 가능!다만, nn.BCELoss를 사용할 때는 정답 데이터를 One-Hot Vector 형태로 만들어야 함각 클래스별로 개별적으로 확률값을 비교하는 방식이라 생각하면 이해하기 쉬움BCEWithLogitsLoss는 sigmoid가 포함되어 있어 추가 변환 없이 사용 가능(사진)
질문&답변
KL Div Loss에서 Negative Entropy를 더해주는 의미에 대해서
안녕하세요 변정현입니다!좋은 질문 감사합니다!첫번째로는, KL Div. Loss에서 Negative Entropy가 모델의 성능과 관계없다고 보기는 어렵습니다.Negative Entropy가 높을수록 학습 데이터셋의 난이도가 낮고, 반대로 낮을수록 학습 데이터셋의 난이도가 높다고 볼 수 있습니다.만약에 KL Div Loss와 CE Loss을 Gradient Descent을 위한 손실함수로서가 아니라 모델 성능 평가 지표로 활용하는 경우를 예시로 들어보겠습니다. 그런 경우에는 "데이터셋의 난이도도 고려해서 모델이 얼마나 잘 맞추는가"의 측면에서 모델의 성능을 평가하고 싶으면 KL Div. Loss을 사용해 볼 수 있습니다. 반면에 "데이터셋의 난이도와 상관없이 모델이 얼마나 잘 맞추는가"의 측면에서 모델의 성능을 평가하고 싶으면 Cross Entropy Loss을 사용할 수 있는 것입니다.하지만, Negative Entropy 값이 모델의 parameter에 독립적인 값입니다. 따라서 모델의 parameter에 대한 Gradient (경사)를 계산하게 되면 0이 됩니다. 따라서 Gradient Descent에서는 KL Div. Loss와 CE Loss은 둘 다 똑같은 Gradient을 가지게 되는 것이고 Gradient Descent 관점에서는 Negative Entropy 값은 영향을 주지 않는 것입니다.따라서 만약에 Negative Entropy 값도 활용하고 싶다면, 해당 값에 비례한 Learning Rate을 Gradient step에 곱해주는 방식으로 Gradient Descent 알고리즘을 수정해 볼 수도 있습니다!
질문&답변
GoogleNet Inception 모듈
안녕하세요!Inception Block을 구성하는 각 Conv2d, MaxPool2d은 입력되는 Feature 크기와 출력되는 Feature 크기가 동일하도록 Kernel Size, Stride, Padding이 설정되어 있습니다MaxPool2d의 Kernel Size = 3, Stride =1, Padding=1Conv2d의 Kernel Size = 3, Stride =1, Padding=1으로 구성되어 있습니다!따라서 Concatenation하게되는 Conv2d가 출력하는 Feature의 shape과 MaxPool2d가 출력하는 Feature의 shape들은 서로 동일한 것입니다.아래는 Inception3a Layer의 예시를 가져온 것입니다!(사진)
질문&답변
Batch Normalization 효과
안녕하세요!좋은 질문 감사합니다!개인적인 사정으로 답변이 많이 늦어져서 죄송합니다 ㅠㅠ아래에 첨부한 설명 참고 부탁드립니다!(사진)(사진)(사진)(사진)(사진)(사진)(사진)(사진)
질문&답변
Layer Norm이 언어모델에 적합한 이유
안녕하세요 좋은 질문 감사합니다!여러 이유가 있지만 Batch Norm 대신에 Layer Norm을 NLP나 Sequence 데이터셋 모델링에서 사용하는 가장 큰 이유는 Batch Norm은 Batch을 묶어서 평균을 내는데 NLP에서는 문장의 길이가 가변적이기 때문입니다.따라서 평균 혹은 표준편차를 계산할때, 분모로 나눠줘야 하는 N을 mini-batch을 구성하는 문장들 중에서 어떤 문장의 길이를 기준으로 설정할 것인가가 명확하지 않습니다.부연 설명 드리자면, Normalization을 하기 위해서 평균 = sum(x_i) / N, 표준편차 = sqrt ( sum(x_i - 평균)^2 / N )에 대한 계산이 필요한데, Batch-Norm을 Mini-Batch을 통틀어서 평균과 표준편차를 계산합니다.따라서 길이가 가장 긴 문장의 길이를 N으로 둬서 평균과 표준편차를 계산한다고 가정하면, 동일한 데이터 샘플에 대해서도 해당 데이터 샘플이 속해있는 mini-batch에서 가장 긴 문장의 길이 N이 다르면 계산되는 평균과 표준편차 값도 달라지는 문제가 있습니다.하지만 Layer Norm은 각 데이터 샘플에 대해서 개별적으로 평균과 표준편차가 계산되므로 해당 문제를 겪지 않게 되는 셈입니다.글로 이해하는데 헷갈릴 수 있으므로, 첨부한 이미지도 참고부탁드립니다!(사진)
질문&답변
9-2 fully connected NN
안녕하세요!좋은 질문 감사합니다!네 Sigmoid을 통과한 logit은 각각 0~1 사이의 값을 가지지만 logit 값들의 합은 1이 되지 않습니다!따라서 예측 확률값으로 변환하기 위해서 Softmax 함수를 사용했습니다!
질문&답변
Mini-batch Gradient Descent computation time 질문
안녕하세요!좋은 질문해주셔서 또 한번 감사드립니다!네 정확합니다!만약에 GPU에 올릴 수 있는 최대 데이터양이 100개라면 최대로 한번에 병렬 처리할 수 있는 데이터양도 100개가 한계입니다. 따라서 500개의 데이터 샘플들을 처리하기 위해서는 100개로 구성된 미니배치 5개를 차례대로 순회해야합니다.반면에 GPU에 올릴 수 있는 데이터양 (즉 100개) 에 한해서는 샘플 하나하나씩 차례대로 계산하지 않아도 되기 때문에 Mini-batch을 구성하는 데이터 수에 대해서는 연산 소요 시간이 비례하지 않습니다!
질문&답변
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로 보시면 되겠습니다!