inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

딥러닝 이론 + PyTorch 실무 완전 정복

[실습] PyTorch로 만들어보는 RNN, LSTM, GRU

Section 15 실습 중, lstm 클래스의 forward 함수 질문

해결된 질문

236

koo2788

작성한 질문수 1

1

안녕하세요, 먼저 좋은 강의 제공해 주셔서 감사하게 잘 듣고 있다는 감사 말씀 드리고 싶습니다.

질문 사항은,

수업 중 정의하신 lstm 클래스의 forward 함수를 아래와 같이 정의 하셨는데요,

class LSTM(torch.nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers, n_classes) -> None:
        super(LSTM, self).__init__()

        self.vocab_size = vocab_size
        self.embedding_dim = embedding_dim
        self.embedding = torch.nn.Embedding(vocab_size, embedding_dim)
        self.lstm = torch.nn.LSTM(input_size=embedding_dim, 
                                  hidden_size=hidden_dim,
                                  num_layers=num_layers,
                                  batch_first=True,
                                  dropout=0.2)
        self.fc = torch.nn.Linear(in_features=hidden_dim, out_features=num_classes)
        self.sigmoid = torch.nn.Sigmoid()

    def forward(self, x):
        x = self.embedding(x)

        x, (h_n, c_n) = self.lstm(x)

        x = torch.sum(h_n, dim=0)

        x = self.fc(x)

        return x

forward 함수의 마지막 부분에서 fc를 통과한 x를 self.sigmod 함수에 통과 시키지 않고 return 하여도 되는건지 궁금합니다.

딥러닝 pytorch NLP 컴퓨터-비전 cnn rnn transformer llm

답변 2

2

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

forward 함수에서 fc를 통과한 후 xself.sigmoid 함수에 통과시키지 않고 return하는 것이 적합한지 여부는 해당 네트워크가 해결하고자 하는 문제의 종류와 네트워크의 마지막 출력층에 필요한 activation 함수에 따라 달라집니다.

만약 문제가 이진 분류(Binary Classification) 문제라면, sigmoid 함수를 사용하여 출력층에서의 값들을 0과 1 사이의 확률값으로 변환하는 것이 일반적입니다. 이렇게 하면 모델이 어떤 클래스에 속할 확률을 나타내게 되며, 이를 통해 최종 분류를 할 수 있습니다.

하지만, 여러분이 구현하신 LSTM 모델의 forward 함수에서 self.sigmoid 함수를 사용하지 않은 채로 return을 하셨다면, 이는 마지막 레이어에서 활성화 함수를 적용하지 않겠다는 의미가 됩니다. 이 경우는 모델이 다중 클래스 분류(Multi-Class Classification)를 수행하고 있거나, 출력층에 어떤 특별한 활성화 함수를 적용하기보다는 raw output을 원하는 경우일 수 있습니다.

결론적으로, sigmoid 함수를 사용할지 여부는 문제의 성격과 모델 설계 의도에 따라 결정됩니다. 따라서 이진 분류 문제를 다루고 있고, 마지막에 확률값을 얻고 싶다면 sigmoid 함수를 적용해야 합니다. 그렇지 않고 다른 의도가 있다면 생략할 수도 있습니다.

0

변정현

안녕하세요 변정현입니다!

먼저 질문에 대한 답변이 늦어진점 양해 부탁드립니다.

좋은 질문 감사합니다!

제가 Sigmoid을 취하지 않은 이유는 torch.nn.LSTM 에서는 이미 output h_t은 sigmoid 함수의 값 o_t와 hyperbolic tangent 함수의 값 tanh(c_t)가 곱해졌기에, h_t의 각 요소는 -1 에서 1 사이의 값을 가집니다!

따라서 h_t 혹은 h_t의 합에 sigmoid 값을 다시 취하게 되면 해당 값이 너무 작아지게 되므로 모델의 학습이 느려지는 문제가 발생합니다.

스크린샷 2024-08-03 오후 7.29.34.png스크린샷 2024-08-03 오후 7.29.20.png

 

 

노션URL 이동문제

0

56

1

섹션12 실습코드 의 initialization 각각 적용 코드 문의

0

97

0

오타

0

82

0

혹시 이론강의 자료도 공유가 가능하실까요?

1

166

1

[sec. 2-8 실습] 배치사이즈의 선택

0

171

2

[section 14 / [실습] 직접 만든 CNN 모델과 ResNet, VGGNet을 활용한 CV 프로젝트] transforms.Normalize 질문

1

226

1

[section 14 / VGGNet ] receptive filed 질문

1

131

2

[섹션3, PyTorch로 구현해보는 Loss Function] 분류task loss함수 질문입니다.

1

232

2

KL Div Loss에서 Negative Entropy를 더해주는 의미에 대해서

1

193

2

GoogleNet Inception 모듈

1

166

2

Batch Normalization 효과

1

183

2

Layer Norm이 언어모델에 적합한 이유

1

520

1

9-2 fully connected NN

1

129

1

Mini-batch Gradient Descent computation time 질문

1

175

2

Huber Loss에 대한 질문

1

303

2

Batch size 가 극단적으로 작은 경우 (예를들어 batch_size =1) Normalization 적용 방안

3

351

1

Normalization 질문

1

270

2

Section 7 [Activation Function의 종류] Softmax logit 분포와 Entropy 질문이 있습니다

2

210

1

Section 3 [실습] PyTorch로 구현해보는 Loss Function의 Cross Entropy 구현 관련하여 질문이 있습니다.

1

299

1

Section 3의 [이론] Regression task의 Loss: L1, L2, Huber, Log Cosh Loss "미분가능"관련 에서 질문이 있습니다.

1

280

1

Section 16 [이론] Transformer의 Encoder 질문

1

177

1

Auto Differentiation에서 computational Graph 질문있습니다

1

212

1

Section 3 이론 classification Loss function 질문

1

235

1

section4의 entropy 시그마 식 전개에 대한 질문입니다.

1

265

2