본문 바로가기
728x90

Deep Learning (AI)20

[Pytorch] Set seed import torch import numpy as np import random import torch.backends.cudnn as cudnn def set_seed(num): torch.manual_seed(num) torch.cuda.manual_seed(num) torch.cuda.manual_seed_all(num) np.random.seed(num) cudnn.benchmark = False cudnn.deterministic = True random.seed(num) 2023. 11. 5.
[DL] 오토인코더(Autoncoder) 본 포스팅은 DMQA 오픈 세미나 자료 및 영상을 참고하여 정리하였습니다. http://dmqm.korea.ac.kr/activity/seminar/330 고려대학교 DMQA 연구실 고려대학교 산업경영공학부 데이터마이닝 및 품질애널리틱스 연구실 dmqa.korea.ac.kr 1. 오토인코더란 무엇일까? 정의 : 레이블이 없는 비지도학습에 주로 사용되는 신경망 형태이다. 구조 : Encoder와 Decoder가 bottleneck 구조를 이룸 Encoder : 입력 데이터를 의미있게 함축된 representation한다. Decoder : Encoding 된 representation을 다시 원본 데이터로 복원 reconstruction loss : 입력 데이터와 복원 데이터의 차이를 학습하여, loss를.. 2023. 8. 23.
[DL] Batch Normalization이란? 효과? ICS? Smoothing? 이 포스팅은 아래 강의를 정리 및 일부항목을 추가한 것입니다. 매우 유익하고 설명이 자세하니 참고 바랍니다. https://www.youtube.com/watch?v=58fuWVu5DVU Batch Normalization 효과 ① 학습 수렴속도가 빠르다. - 적은 epoch으로도 사용하지 않는 것 대비 높은 성능을 달성 ② 가중치 초기화(weight initalization)에 대한 민감도를 감소시킨다. - 모델을 학습할 때, 하이퍼파라미터의 변경은 모델의 수렴을 크게 좌우하지만, BN을 사용하면 덜 정교한 하이퍼파라미터 세팅이더라도 정상적으로 수렴한다. 예를 들어 learning-rate를 크게 잡아 모델이 학습이 안되는 경우에 BN을 적용시 정상적으로 수렴하는 것을 볼 수 있다. ③ 모델의 일반화(.. 2023. 8. 15.
[Pytorch] nn.Parameter()로 grad 확인하기 troch graph에서 특정 노드로 흘러오는 역전파 값을 확인하고 싶을 때 유용하게 사용할 수 있습니다. torch는 requiers_grad=True를 통해 연산된 텐서들을 autograd로 추적할 수 있지만, leaf node가 아닌 변수들의 gradient는 None으로 바뀌게 됩니다. 이러한 변수들의 gradient를 남기기 위해서 retain_grad()를 사용합니다. x_stage1로 전달되는 미분값의 확인을 위해 params를 더해줍니다. 더해주는 연산은 역전파가 동일하게 흐르므로, 전파되는 미분값의 크기를 대략적으로 파악할 수 있습니다. 이를 통해, 계수의 조절과 loss가 적절한지 등 실험설계의 방향성을 잡는데 좋습니다. 2023. 8. 6.
Cost Function은 무엇이며, 알고 있는 cost function에 대해서 말해주세요 cost function(=loss function)은 모델이 최적의 파라미터를 찾도록 사용자의 의도에 따라 올바른 학습방향을 안내해주는 함수입니다. Task에 따라 그 목적이 상이할 수 있는데, 예를 들어 지도학습의 classification에서는 정답과의 차이를 cross entropy loss를 통해 모델이 카테고리를 분류할 수 있도록 하는데, 이때 학습되는 방향은 정답에 대한 예측값과 정답이 아닌 예측값에 대해서 미분방향을 반대로 주어서 분리되도록 학습합니다. 결국 CE loss가 최소가 되도록 합니다. 이와 유사한 loss function으로는 MAE, MSE, BCE, KLD가 있습니다. 이와 반대로 loss function의 값을 최대가 되도록 하는 loss는 negative pair los.. 2023. 8. 4.
MLP에서 1x1을 사용해서 Bottleneck 구조를 설계하고, 그렇게 설계한 이유는? MLP에서의 1x1 conv를 사용한 Bottleneck 구조의 설계는 다음과 같습니다. (n,c) -> (1x1,c/4) -> activation function -> (c/4,c/4) -> activation function -> (1x1, c) -> activation function -> (n,c) 그리고 입력과 출력을 더해주면 완성입니다. CNN에서의 여러 채널들은 여러 filter들을 사용해 이미지에서의 지역적인 다양한 특징들을 추출하여, 특정 채널은 이미지의 특정 특징과 반응하게 된다고 생각합니다. 이와 유사하게 MLP에서의 채널도 이미지의 전체를 보고 해당 이미지에 대한 특징을 대표적으로 표현한다고 할 수 있습니다. 이를 1x1 conv의 Bottleneck구조를 적용한다면, CNN에서와 .. 2023. 8. 3.
1x1 convolution은 언제 사용되며 의미와 효과? 1x1 convolutionn은 적은 파라미터로 깊은 신경망을 학습하기 위해서 사용되며, 대표적으로 ResNet50의 Bottleneck 구조에 이용됩니다. 신경망 특성상 깊어질수록 채널수가 더욱 증가하여 특징들을 고차원화하여 복잡한 패턴을 인식하도록 합니다. 하지만, 신경망이 깊어질수록 그만큼 컴퓨팅이 증가하기 때문에 성능대비 비효율적입니다. 하지만 1x1 conv기반의 Bottleneck구조를 사용하게 되면, 채널을 줄이고 특징을 추출하고 다시 채널을 늘리는 방식으로 적은 채널의 텐서에서 특징을 추출, 중간중간에 relu와 같은 activation function으로 비선형성을 증가시켜줍니다. 그러므로 적은 파라미터로 깊은 신경망을 쌓아 더 복잡한 패턴을 파악할 수 있습니다. Bottleneck의 예.. 2023. 8. 3.
딥러닝은 무엇이며, 머신러닝과의 차이점은? 딥러닝은 깊은 인공신경망을 이용해 대량의 데이터에 대하 복잡한 패턴을 학습하는 것입니다. 딥러닝과 머신러닝의 차이는 깊이와 복잡성에 있습니다. 머신러닝은 딥러닝에 비해 계층구조가 얕고, 비교적 소규모의 데이터에 적합한 학습을 목표로 합니다. 그렇기 때문에 사용자가 데이터의 전처리와 특징추출에 대해서 많이 개입하게 됩니다. 반면에 딥러닝은 대용량의 원시 데이를 기반으로 복잡한 패턴을 모델이 스스로 추출 및 파악하도록 학습하기 때문에 사용자의 개입이 매우 적습니다. 즉, 머신러닝은 의도하는 기계학습만을 사용자가 예측 가능한 수준에서 수행하지만, 딥러닝은 모델이 사용자가 예측하는 것을 넘어서 스스로 매우 복잡한 패턴을 파악하도록 합니다. 2023. 8. 3.
[Pytorch] Cosin Similarity Loss +역전파 1. Cosin Similarity Loss import torch import torch.nn.functional as F import torch.nn as nn feat1 = torch.tensor([0.1,0.2,0.3], dtype=torch.float32) feat2 = torch.tensor([0.4,0.2,0.5], dtype=torch.float32) loss = F.cosine_similarity(feat1, feat2) # negative cosin loss loss = -F.cosine_similarity(feat1, feat2) # positive cosin loss 두 벡터(feature)를 가깝게 혹은 멀게 만들도록 학습합니다. 저는 여기서 의문점이 들었습니다. 위의 수식의 역전.. 2023. 7. 30.
[Pytorch] Inplace error 해결 inplace error - 텐서의 임의의 값을 변경(대체) 헀을 때 gradient가 끊기면서 발생하는 문제 - ex) a = b 이런식으로 대체할 경우에 발생함. a += 1 이런식의 표현도 에러가 발생할 수 있음. -> a = a + 1, 이렇게 수행해야 한다. a[index] = b 이런식의 표현도 동일. - 해결책은 clone()을 사용해서 텐서를 복사후에 대체를 하고 넘겨주면 된다. - ex) c = a.clone() c[index] = b a = c return a 2023. 7. 29.
[Pytorch] Tensor 다차원 인덱싱 torch tensor를 다루다 보면 3차원 혹은 4차원 이상의 텐서를 다룰 때, 인덱싱의 어려움이 생길 때가 있습니다. 예를 들어, 4차원에서 각 batch마다 다른 channel의 특정 index만 추출하고 싶을 때가 그렇습니다. 아래 코드는 각 배치마다 다른 채널의 값들을 가져오는 예시입니다. import torch a = torch.randn(2,3,2,3) b,c,w,h = a.shape batch_index = list([i] for i in range(b)) # [[0],[1]] channel_index = [[0,0,0],[1,1,1]] # 각 배치마다 가져올 채널 지정 k = a[batch_index, channel_index] # 각 배치에 해당하는 각 채널들을 인덱싱하여 가져옴 a라는.. 2023. 7. 29.
[Pytorch] Negative Pair Loss 코드 두 feature가 멀어지도록 학습하는 loss Negative Pair Loss = max(margin - distance_metric(feature_1, feature_2), 0) -------- (1) where, max(f(x),0)은 f(x) > 0 이면 backpropagation 수행, margin은 feature_1과 feature_2를 얼마나 멀게 할 것인지, distance_metric은 두 feature의 거리를 구하는 function. 즉, 두 feature의 거리를 구하고 margin을 더했을 시, 0보다 크면 역전파하여 멀어지게 한다. 이 term은 triplet loss에서 positive pair과 같이 사용되기도 한다. 그렇다면 어떻게 두 feature를 멀어지게 한다는 것.. 2023. 7. 21.
728x90