전체 글(137)
-
Pytorch로 시작하는 딥러닝 입문(07-01. 순환 신경망, Recurrent Neural Network, RNN)
RNN은 시퀀스(sequence) 모델로, 입력과 출력을 시퀀스 단위로 처리하는 모델이다. 번역기를 생각해보면 입력은 번역하고자 하는 문장, 즉 단어 시퀀스이다. 출력에 해당하는 번역된 문장 또한 단어 시퀀스이다. 이러한 시퀀스들을 처리하기 위해 고안된 모델들을 시퀀스 모델이라고 한다. 그 중에서도 RNN은 딥러닝에서 가장 기본적인 시퀀스 모델이다. ♣ 순환신경망(RNN)앞서 배운 신경망들은 모두 은닉층에서 활성화함수를 지난 값이 출력층 방향으로만 향했다. 이와 같은 신경망들을 Feed Forward Neural Network라고 한다. RNN은 이와 달리 은닉층의 노드에서 활성화함수를 통해 나온 결과값을 출력층 방향으로도 보내면서 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖는다. 그..
2024.03.17 -
Pytorch로 시작하는 딥러닝 입문(06-10. 기울기 소실과 폭주, 기울기 초기화: Vanishing Gradient, Exploding Gradient, Weight Initialization)
깊은 인공신경망을 학습하다보면 역전파 과정에서 입력층으로 갈수록 기울기가 점차적으로 작아지는 현상이 발생할 수 있다. 입력층에 가까운 층들에서 가중치들이 제대로 업데이트 되지 않으면 최적의 모델을 찾을 수 없다. 이를 기울기 소실(Gradient Vanishing)이라고 한다. 반대의 경우로, 기울기가 점차 커지면서 가중치들이 비정상적으로 큰 값이 되어 발산되기도 한다. 이를 기울기 폭주(Gradient Exploding)이라고 하며, 뒤에서 배울 순환신경망(Recurrent Neural Network, RNN)에서 발생할 수 있다. 여기서는 기울기 소실 또는 기울기 폭주를 막는 방법들에 대해 다룬다. ♣ ReLU와 ReLU의 변형들시그모이드 함수를 사용하면 입력의 절대값이 클 경우, 시그모이드 ..
2024.03.17 -
Pytorch로 시작하는 딥러닝 입문(06-09. 과적합을 막은 방법들/augmentation, regularization, Dropout, Early stopping)
모델이 과적합되면 훈련 데이터에 대한 정확도는 높을지라도 새로운 데이터에 대해서는 제대로 동작하지 않는다. 이번에는 모델의 과적합을 막을 수 있는 여러 가지 방법에 대해서 논의한다. ♣ 데이터의 양 늘리기데이터의 양이 적을 경우, 모델은 헤당 데이터의 특정 패턴이나 노이즈까지 쉽게 암기하게 되므로 과적합 현상이 발생할 확률이 늘어난다. 데이터의 양을 늘릴수록 모델은 데이터의 일반적인 패턴을 학습하여 과적합을 방지할 수 있다. 데이터의 양이 적은 경우, 의도적으로 기존 데이터를 조금씩 변형하고 추가하여 데이터의 양을 늘리기도 하는데, 이를 데이터 증식, 또는 증강(Data Augmentation)이라고 한다. 이미지의 경우에 데이터 증식이 많이 사용되는데 이미지를 돌리거나 노이즈를 추가하고, 일부분을 ..
2024.03.16 -
Pytorch로 시작하는 딥러닝 입문(06-08. 다층 퍼셉트론으로 MNIST 분류하기)
소프트맥스 회귀를 사용한 다층 퍼셉트론을 구현하고 딥러닝을 통해 MNIST 데이터를 분류해보자♣ 데이터 로드 *sklearn.datasets는 대표적인 sample datasets들을 제공하는 모듈이다. https://teddylee777.github.io/scikit-learn/Sklearn-dataset-%EB%AA%A8%EB%93%88%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-dataset%EB%A1%9C%EB%94%A9%ED%95%98%EA%B8%B0/ sklearn.datasets 모듈을 활용하여 샘플데이터 로딩하기sklearn.datasets 모듈을 활용하여 샘플데이터 로딩하는 방법에 대하여 알아보겠습니다.teddylee777.github.io..
2024.03.16 -
Pytorch로 시작하는 딥러닝 입문(06-07. 다층 퍼셉트론으로 손글씨 분류하기)
♣ 숫자 필기 데이터 숫자 필기 데이터는 0부터 9까지의 숫자를 손으로 쓴 이미지 데이터로, load_digits( ) 명령으로 로드할 수 있다. 각 이미지는 0부터 15까지의 명암을 가지는 8×8=64 픽셀 해상도의 흑백 이미지이다. 첫 번째 샘플을 출력해보자. .images[인덱스]를 사용하면 해당 인덱스의 이미지를 행렬로써 출력할 수 있다. 첫 번째 샘플이 8 × 8 행렬로 출력된 것을 볼 수 있다. 0을 흰색 도화지, 0보다 큰 숫자들을 검은색 점이라고 상상하면 숫자 0의 실루엣처럼 보인다. 실제로 레이블도 숫자 0인지 첫 번째 샘플의 레이블을 확인해보자.첫 번째 샘플의 레이블은 0인 것을 확인할 수 있다. 이런 샘플이 몇 개 있는지 확인해보자. 전체 샘플의 수는 1,797개이다. 전체 샘플..
2024.03.14 -
DP(백준 알고리즘 2156번)
♣ 문제 이해하기 ♣ 문제 풀이 당연히 DP를 사용하는 문제이다. 포도주 세 잔을 연달아 마실 수 없을 때, 최대로 포도주를 마실 수 있는 방법을 찾아야 한다. 각 포도주 잔이 가진 양을 나타내는 배열을 drinks, 앞에서부터 마신 포도주를 적립한 양을 나타낸 배열을 dp라고 한다. 포도주를 마실 때마다 다음과 같이 선택할 수 있다. 1. i번째 포도주를 마실 때 1-1. i-1 번째 포도주를 마시지 않았을 때 i번째 포도주는 마시면서 i-1번째 포도주는 마시지 않았을 때, 최댓값을 구하려면 i-3번째 포도주와 i-2번째 포도주는 모두 마신 상태여야 한다. 따라서 dp[i] =dp[i-2] + drinks[i] 1-2. i-1번째 포도주를 마셨을 때 i번째 포도주와 i-1번째 포도주를 모두 마실 때는 ..
2024.03.14