728x90 Drawing (AI)/DeepLearning38 딥러닝 직접 구현하기 - (CNN) 구조 CNN(Convolutional Neural Network)은 이전에도 블로그에서 자주 다뤘으니 기본 개념은 간단히 다루고 넘어가고 구현하는 부분에 집중하도록 한다. CNN은 컴퓨터 비전과 이미지 인식에서 널리 사용되는 심층 학습 모델이다. Fully Connected Layer와는 다르게 전체 데이터를 섞어버리지 않고 각 부분의 특징을 보존하기 때문에 CNN은 이미지에서 패턴을 인식하고 이를 분류하는 데 탁월한 능력을 지닌다. CNN에서 쓰이는 개념들을 간단히 살펴보자. 커널 (Kernel) / 필터 (Filter) 커널 또는 필터로 불리는 행렬은 이미지의 특정 특성을 추출하는 데 사용되는 작은 행렬이다. 커널은 이미지의 윈도우와 요소별로 곱해지며, 그 결과를 합하여 피처맵의 한 요소를 형성한다... 2024. 1. 19. 딥러닝 직접 구현하기 - (Training process) Overfitting 오버피팅은 주로 매개변수가 많아서 표현력이 높은 모델이고 훈련 데이터가 적을 때 발생한다. 데이터에 맞춰서 학습하는 능력이 뛰어난데 맞춰갈 데이터의 수가 적으니 그에 과적합해진다고 생각하면 당연한 조건이다. 이러한 조건에 충족한 상황을 만들어서 오버피팅을 발생시키고 결과를 살펴보자. 60,000개인 MNIST데이터셋중 300개만 사용하고 7층 네트워크를 사용하여 복잡도를 높혀보자. 각 층은 100개의 뉴런, ReLU 활성화 함수를 사용하였다. from dataset.mnist import load_mnist (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True) # 오버피팅을 재현하기 위해 학습 데이터 수를 줄임 x_tr.. 2024. 1. 15. Udemy - 딥러닝의 모든 것(AutoEncoders) - (2) Overcomplete Hidden Layers 기존의 AutoEncoder들은 모두 hidden layer로 넘어갈때 정보를 압축하여 노드수가 줄었는데 아래와 같이 오히려 개수가 늘어나는 것도 가능은하다. 데이터가 무거워져서 왜 그런 짓을 하지? 싶을 수 있지만 feature extraction의 목적으로 이용할 때는 다양한 feature를 뽑아낼 수 있어서 효용이 있을 수 있다. 그러나 input, output layer들 보다 hidden layer의 노드수가 많으면 input과 output의 값이 같아지는 것이 목표이므로 hidden node에 input 노드 수만큼의 node들에 값을 그대로 넣어서 output까지 넘겨버리고 남는 노드는 그냥 버리는 식으로 학습을 해버릴 수 있다. 그렇게 진행되.. 2024. 1. 11. 딥러닝 직접 구현하기 - (배치 정규화) 배치 정규화 이전에는 가중치의 초깃값을 적절히 설정하면 각 층의 활성화 값 분포가 적당히 퍼지면서 원활하게 학습이 진행됨을 확인했다. 이번에는 각층이 활성화를 적당히 퍼뜨리도록 강제하는 방법을 이용해보려한다. 이런 아이디어에서 시작된 방법을 배치 정규화(Batch Normalization)이라한다. 배치 정규화 알고리즘은 2015년 제안된 방법으로 나온지 얼마 안 된 기법임에도 현재 굉장히 많이 사용된다. 배치 정규화는 다음과 같은 장점이 존재한다. 1. 학습 속도 개선 2. 초깃값 선택에 크게 의존하지 않음 3. 오버피팅을 억제 위와 같이 Batch Normalization을 이용한다. 배치 정규화는 이름 그대로 학습 시 미니배치를 단위로 정규화한다. 정확히는 데이터 분포의 평균이 0, 분산이 1이 되.. 2024. 1. 11. Udemy - 딥러닝의 모든 것(AutoEncoders) - (1) AutoEncoders 우선 AutoEncoder는 아래와 같이 생겼다. 다시 유향 신경망 모델로 돌아왔음을 알 수 있다. 인코딩후에 디코딩을 하고 값을 서로 비교하는 과정을 통해서 학습을 진행하여 비지도 학습중 하나의 형태인 Self-supervised라고 볼 수 있다. 학습 과정에서 Hidden Nodes들에 학습되어 나타난 feature들을 추합하여 feature 추출에도 이용될 수 있고 강력한 추천 모델로도 이용될 수 있다. 우선 아래의 간소화된 모델을 통해서 살펴보자. 유저가 보고 평가한 영화들에 대해서 좋게 평가한것은 1, 나쁘게 평가한 것은 0으로 기록되어있고 인코더를 통해서 암호화가 될 것이다. 네개의 노드를 두개의 노드로 압축하여 공간 효율도 챙길 수 있게 된다. 어떻게 이렇게 압축이 가.. 2024. 1. 10. 딥러닝 직접 구현하기 - (가중치 초기값) 가중치의 초기값 신경망 학습에서 가중치의 초기값은 매우 중요하다. 가중치의 초기값 설정이 신경망 학습의 성패를 가르는 일이 실제로 자주 있다. 오버피팅을 억제하여 범용 성능을 높이는 테크닉인 가중치 감소(weight decay) 기법을 살펴볼 건데 이는 말 그대로 가중치 매개변수의 값이 작아지도록 학습하여 오버피팅을 방지하는 것이다. 가중치를 작게 만들려면 초깃값도 최대한 작게 만드는 것이 좋다. 따라서 이전에 사용할 때는 단순히 0.01*np.random.randn(10,100)과 같이 정규분포에서 생성된 값을 0.01배로 만든 작은 값을 사용했다. 이때 가중치의 초기값을 작게 하기 위해 0으로 설정하면 오차역전파 과정에서 모든 가중치의 값이 똑같이 전달되기 때문에 학습이 제대로 이루어지지 않는다. 따.. 2024. 1. 10. 딥러닝 직접 구현하기 - (Optimizer) SGD 확률적 경사 하강법(stochastic gradient descent)의 줄임말인 SGD는 현재 상태에서 학습률과 미분값에 비례한 값을 빼서 갱신하는 방식을 이용한다. 위 식을 기반으로 파이썬 클래스로 구현하면 아래와 같다. class SGD: def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads): for key in params.keys(): params[key] -= self.lr * grads[key] lr : 학습률, learning rate. 인스턴스 변수로 유지 update(params, grads) : SGD 과정에서 반복해서 호출됨 params : 딕셔너리 변수. 가중치 매개변수 저장됨. 예시 params.. 2024. 1. 8. Udemy - 딥러닝의 모든 것(볼츠만 머신 구축하기) 영화 추천 시스템 볼츠만 머신을 이용하여 Movie Lens 데이터를 이용하여 영화를 추천하는 모델을 구축해보도록 하자. Movie Lens dataset은 주로 100K 데이터가 학습, 개발으로 쓰이고 20M데이터가 연구 벤치마크로 쓰인다고 한다. 100K데이터를 주로 다뤄보려한다. 위와 같이 유저에 따른 영화에 매긴 평점이 데이터로 존재한다. Movie Lens EDA 자료가 Kaggle에 있어 참고하보고자 한다. 처음 딥러닝 공부를 할때는 데이터 자체보다는 기술에 관심이 많았으나 다양한 과제와 대회에 참여하다보니 데이터의 특징을 파악하고 정제하고 다루는 것이 매우 중요함을 알게되어 데이터를 더 살펴보게 되는 습관이 생겼다. 참고: https://www.kaggle.com/code/salmaneunu.. 2024. 1. 8. 딥러닝 직접 구현하기 - (오차역전파법) 오차역전파법 오차역전파법(Backpropagation)은 신경망을 훈련시키기 위한 핵심적인 알고리즘 중 하나이다. 이 방법은 신경망에서 발생하는 오차를 각 뉴런의 가중치에 역으로 전파함으로써 가중치를 조정하는 과정을 포함한다. 오차역전파법은 주로 다음의 단계들로 구성된다. 전방향 전파(Forward Propagation): 입력 데이터가 신경망을 통해 앞으로 전파되며, 각 층의 뉴런은 활성화 함수를 통해 출력값을 생성한다. 이 과정은 입력층에서 시작해 출력층에서 끝난다. 손실 함수 계산: 신경망의 출력과 실제 목표값 사이의 차이를 측정하는 손실 함수(loss function)를 계산한다. 이 손실은 신경망이 얼마나 잘못된 예측을 하고 있는지를 나타내는 지표이다. 역방향 전파(Backward Propaga.. 2024. 1. 7. 이전 1 2 3 4 5 다음 728x90