전체 글 47

RNN과 CNN을 사용해 시퀀스 처리하기 예시

이전 포스팅에서 RNN의 기본 구조와 교재의 예시를 통해 이해하고자 하였지만... 뭔가 직관적으로 이해하기가 힘들어 진도를 빼지 못하고 있었다... 정말 운 좋게 정리를 잘 해놓아주신 분의 글을 발견하였다..! RNN의 기본 구조, 입력값과 출력값 등에 대해서 다시 한 번 공부해봐야겠다..ㅠ yjjo.tistory.com/32 RNN Tensorflow + Keras 이번 포스팅은 Tensorflow의 keras를 이용하여 RNN의 다양한 구조를 구현해보는 것이 목표입니다. RNN에는 크게 세 가지 방법이 있는데 simple RNN, LSTM, GRU가 있습니다. 이번 실습은 simple RNN을 이용하여 ma yjjo.tistory.com 텐서플로와 케라스를 활용하여 RNN을 구현할 때 입력 데이터의 ..

RNN과 CNN을 사용해 시퀀스 처리하기 1 (+내용추가)

이번 포스팅에서는 미래를 예측할 수 있는 네트워크인 순환 신경망(RNN, recurrent neural networks)을 알아볼 것이다. 이 신경망은 시계을 데이터를 분석해서 주식가격 같은 것을 예측해 언제 사고팔지 알려줄 수 있다. 자율주행 시스템에서는 차의 이동 경로를 예측하고 사고를 피하도록 도울 수 있다. 일반적으로 이 신경망은 고정 길이 입력이 아닌 임의 길이를 가진 시퀀스를 입력으로서 다룰 수 있다. 예를 들어, 문장, 문서, 오디오 샘플을 입력으로 받을 수 있고, 자동 번역, 스피치 투 텍스트같은 자연어 처리(NLP)에 매우 유용하다. 순환 뉴런과 순환 층 지금까지는 활성화 신호가 입력층에서 출력층 한 방향으로만 흐르는 피드포워드 신경망에 대해서 공부했었다. 순환 신경망은 피드포워드 신경망..

합성곱 신경망을 사용한 컴퓨터 비전 4

케라스를 사용해 ResNet-34 CNN 구현하기 지난 포스팅에는 다양한 종류의 CNN 모델을 확인해보았다. 이번 포스팅에서는 지난 시간 다뤘던 ResNet 모델을 직접 구현해볼 것이다. 복습 차원에서 ResNet 모델에 대해 다시 한 번 살펴보자. ResNet은 극도로 깊은 네트워크로 구성된 CNN 모델이다. 이렇게 깊은 네트워크를 훈련시킬 수 있는 핵심 요소는 스킵 연결(또는 숏컷 연결)이라 불리우는 네트워크 간 연결인데, 이는 어떤 층에 주입되는 신호가 상위 층의 출력에도 더해지는 메커니즘이라고 볼 수 있다. 예를 들어 목적 함수 h(x) 를 모델링하는 것이 목표인 신경망이 있다고 가정하자. 만약 입력 x를 네트워크의 출력에도 더한다면 (즉, 스킵 연결을 추가하면) 네트워크는 h(x) 대신 f(x)..

합성곱 신경망을 사용한 컴퓨터 비전 3

CNN 구조 전형적인 CNN 구조 CNN은 보통 합성곱 층(+ ReLU) ==> 풀링 층 ==> 합성곱 층(+ ReLU) ==> 풀링 층 ==> ... 의 방식이다. 네트워크를 통과할수록 이미지는 점점 작아지지만, 합성곱 층 때문에 일반적으로 점점 더 깊어진다. (깊이 차원, 즉, 더 많은 특성 맵을 가지게 된다.) 맨 위층에는 몇 개의 완전 연결 층(+ ReLU) 으로 구성된 일반적인 피드포워드 신경망(Feedforward neural network)이 추가되고 마지막 층에서 소프트맥스 등의 활성화 층을 거쳐 예측을 출력한다. 다음 코드는 패션 MNIST 데이터셋 문제 해결을 위한 간단한 CNN 이다. CNN이 출력층에 다다를수록 필터 개수가 늘어난다.(64 -> 128 -> 256) 이는 저수준 특성..

합성곱 신경망을 사용한 컴퓨터 비전 2

풀링 층 풀링 층의 목적은 계산량과 메모리 사용량, 파라미터의 수를 줄여 결과적으로는 과대적합의 위험을 줄여주는 입력 이미지의 부표본(Sub-Sample)을 만드는 것에 있다. 합성곱 층에서와 마찬가지로 풀링 층의 각 뉴런은 이전 층의 작은 수용장 안에 있는 뉴런의 출력과 연결되어 있다. 그러기에 동일하게 크기, 스트라이드, 패딩 유형을 지정해줘야 한다. 하지만 가중치가 없기 때문에 최대나 평균 같은 합산 함수를 사용해 입력값을 더하게 된다. 위의 그림은 가장 널리 사용되는 풀링 층인 최대 풀링 층이다. 해당 예시를 설명하자면 2X2의 풀링 커널(가중치가 없는)과 스트라이드 2를 사용하였고 패딩은 없다. 최대 풀링 층이기 때문에 수용하는 국부 수용장의 가장 큰 값을 입력 값으로 받기 때문에 5를 입력으로..

합성곱 신경망을 사용한 컴퓨터 비전 1

시각 피질 구조 우리 눈의 시각 피질 안에 존재하는 뉴런은 시야의 일부 범위 안에 있는 시각 자극에만 반응하며 이러한 시야의 작은 영역에 있는 특정 패턴을 국부 수용장이라고 한다. 선분 만을 감지하는 뉴런, 원 만을 감지하는 뉴런 등등 다양한 뉴런이 겹치게 되어 전체적인 시야를 인지할 수 있게 되는 것이다. 이러한 관찰은 고수준 뉴런이 이웃한 저수준 뉴런의 출력에 기반한다는 아이디어를 이끌어냈으며 이러한 강력한 구조가 전체 시야 영역에 포함된 모든 종류의 복잡한 패턴을 감지할 수 있게 한다. 특히 이러한 연구는 우리가 CNN, 합성곱 신경망이라고 부르는 모델로 점차 진화되었으며 많은 파라미터로 인해 이미지 인식 문제에 적용이 매우 어려운 완전 연결 층의 심층 신경망 대신에 사용되기 시작하였다. 합성곱 층..

심층 신경망 훈련하기 5

학습률 스케줄링 학습률은 모델의 수렴, 발산에 매우 중요한 역할을 한다. 학습률이 너무 크면 훈련이 발산할 가능성이 크고, 너무 작게 잡으면 훈련의 수렴이 매우 늦어질 수 있다. 적당하지 못한 학습률일 경우 최적점에서 요동이 심해질 수도 있다. 매우 작은 값에서 매우 큰 값까지 지수적으로 학습률을 증가시키면서 모델을 훈련시켜 최적의 학습률을 선택하는 방법을 활용할 수도 있겠지만, 사실 '일정한 학습률' 보다는 '큰 학습률에서 시작하여 학습 속도에 따라 학습률이 변하는' 방법을 사용하게 된다면 좋은 솔루션을 보다 빨리 발견할 수 있다. 이렇게 훈련하는 동안 학습률을 감소시키는 전략을 '학습 스케줄' 이라고 한다. 가장 널리 사용되는 학습 스케줄은 다음과 같다. 거듭제곱 기반 스케줄링 지수 기반 스케줄링 구..

심층 신경망 훈련하기 4

고속 옵티마이저 아주 큰 심층 신경망의 훈련 속도는 심각하게 느릴 수 있다. 이를 해결하기 위해 앞의 포스팅들에서는 연결 가중치에 좋은 초기화 전략 사용하기 좋은 활성화 함수 사용하기 배치 정규화 사용하기 보조 작업, 비지도 학습을 사용하여 만들 수 있는 네트워크의 일부 재사용하기 에 대해서 공부했다. 훈련 속도를 크게 높일 수 있는 또 다른 방법은 표준적인 경사 하강법 옵티마이저 대신 더 빠른 옵티마이저를 사용하는 것이다. 이번 포스팅에서는 모멘텀 최적화(momentum optimization), 네스테로프 가속 경사(Nesterov accelerated gradient), AdaGrad, RMSProp, Adam, Nadam 등의 옵티마이저에 대해서 알아볼 것이다. 모멘텀 최적화 볼링공이 매끈한 표면..

심층 신경망 훈련하기 3

사전훈련된 층 재사용하기 아주 큰 규모의 신경망 모델을 처음부터 새로 훈련하는 것은 매우 비효율적이다. 내가 해결하려는 것과 비슷한 유형의 문제를 처리한 신경망이 이미 있는지 찾아본 다음, 그 신경망의 하위층을 재사용하는 것이 보다 효율적이다. 이를 전이학습 이라고 한다. 보통 상위 은닉층보다 하위 은닉층(저수준)을 재사용하는 경우가 많은데 기존 상위 은닉층은 새로운 작업에서 유용한 상위 은닉층의 특성과는 상당히 다르기 때문이다. 이때 주의할 점은 재사용할 모델에 적용되는 입력 값의 크기가 원래 모델에 사용된 입력 값의 크기가 다르다면 스케일링하여 입력의 크기를 맞춰줘야한다. 왜냐하면 전이 학습은 저수준 특성이 비슷한 입력에서 잘 작동하기 때문이다. 재사용하는 방법을 간략하게 말하자면 1. 먼저 재사용하..

텐서플로에서 데이터 적재와 전처리하기

대용량 데이터를 효율적으로 로드해야 하는 경우 일반적으로 정규화 같은 데이터 전처리가 필요하다. 또한 간편한 수치형 필드로만 구성되어 있지 않기 때문에 원-핫 인코딩, BoW 인코딩, 임베딩 등을 사용하여 인코딩 되어야 한다. (= 매우 고달프고 어렵다.) 메모리 용량에 맞지 않는 아주 큰 규모의 데이터셋으로 딥러닝 시스템을 훈련해야 하는 경우, 텐서플로의 데이터 API는 대규모 데이터셋을 효율적으로 로드하고 전처리할 수 있도록 구현되어있기 때문에 매우 효율적이다. 텐서플로가 멀티스레딩, 큐, 배치, 프리패치같은 사항을 모두 수행해주므로 사용자는 데이터셋 객체를 만들고 데이터를 읽어 올 위치와 변환 방법을 지정하기만 하면 된다. 텐서플로 데이터 API . 연쇄 변환 전체적인 데이터 API의 중심에는 데이..