그동안 이미지 분류가 무엇인지, 선형 분류기, 최적화 방법, 신경망 구성 요소과 신경망 학습 등 전반적으로 살펴보았고, 이제 순환 신경망에 대해서 살펴보고자 한다.
12번째 강의에서는 순환 신경망 recurrent neural network라고 부르는 신경망에 대해서 살펴볼건데, 그 전에 몇 강 전에 배웠던 내용들을 복습해 보자.
(보지 않고 넘어갔지만) 딥러닝 하드웨어와 소프트웨어에 관한 강의에서 다루었던 파이토치와 텐서플로에 대해서 정리한 내용인데, 그 강의에서 다뤘던 파이토치의 가장 큰 문제점은 TPU(구글에서 만든 전문 탠서 처리 유닛 Tensor Processing Unit)를 사용할수 없는 점과 모바일 장치에서 학습한 모델 사용을 지원하지 않는다는 점이었다.
파이토치는 (2019년 당시 기준) 현재 1.3버전이 배포되어있으며, 파이토치 새 버전의 주요 특징이라고 한다면 이 두 문제를 처리해서 모바일 장치에서 사용할수 있도록 모바일 API를 제공하고 있으며, TPU에서도 파이 토치 코드를 동작 시킬수 있도록 개선되었다.
아무튼 이런 이유로 딥러닝 분야에서 어떤 변화들이 일어나는지 꾸준이 주의하면서 보는게 좋겠다.
이제 이전 강의에서 본 내용들로 되돌아와서, 지난 두 강의에서는 어떻게 신경망을 학습할지에 대한 다양한 방법들에 대해서 살펴보았다. 신경망을 잘 학습하기위해서 필요한 활성화 함수와 데이터 전처리, 가중치 초기화와 다른 많은 방법들에 대해서 자세히 알아보았는데, 이들을 잘 이해하고 있으면 어떤 종류의 이미지 분류 문제들을 다루던간에 심층 합성곱 신경망을 학습시키는데 있어서 전문가가 되었다고 할수 있겠다.
이제는 심층 신경망을 가지고 다른 문제들도 풀어볼건데 오늘 다루고자하는 주제는 순환 신경망 recurrent neural networks이다.
일단 우리가 지금까지 심층 신경망을 가지고 다뤄왔던 모든 문제들, 모든 활용 예시들은 순방향 신경망 feed forward network라고 부르는 것인데, 이 순방향 신경망은 신경망의 바닥에서 어떤 단일 입력(이미지)을 받고, 하나나 여러 은닉층(합성곱이나 배치 정규화 계층 등)들을 지나가는데, 각 계층들은 입력을 처리하여 다음층으로 전달하여 신경망의 맨 끝에는 단일 출력을 하게 된다.
이런 순전파 신경망의 고전적인 예시로 이미지 하나를 입력받아 그 이미지가 무엇을 나타내는지 분류하여 카테고리 라벨을 출력하는 이미지 분류 신경망이 있겠다.
우리가 지금까지 이미지 분류 문제를 자세하게 다룬 이유는 이미지 분류가 딥러닝에 대한 수많은 중요한 특징들을 정리해서 다룰수 있었기 때문이다.
하지만 이미지 분류 이외에도 심층 신경망으로 풀고자 하는 수 많은 문제들이 있는데, 이미지 분류 때 처럼 1:1이 아닌 1:다 문제 그러니까 이미지를 입력받아서 하나의 라벨이 아닌 시퀀스를 출력하는 경우도 있다.
이러한 문제의 예시로 이미지 캡셔닝이 있는데, 이 문제에서는 인공 신경망에다가 이미지 한장을 주고 이 이미지에 대한 내용을 설명하는 단어 시퀀스를 출력하며 이것은 지금까지 다뤄왔던 단일 이미지에 단일 이미지 라벨을 출력하는것보다 일반화 시킨 경우로 볼수 있겠다.
다른 활용 예시로는 다 대 1, many : 1 문제로 단일 이미지 같은 단일 입력이 아니라 비디오 프레임 시퀀스 같이 여러개의 데이터 시퀀스를 입력받아 라벨을 할당하는, 분류하는 문제가 되겠다. 여기서 비디오 시퀀스를 입력으로 받아서 어떤 상황인지 판단하는 비디오 분류 문제를 다 대 일 문제라고 볼수 있다.
다 대 다, many : many 문제로 시퀀스를 입력받아 시퀀스를 출력하는 대표적인 문제 예시로 기계 번역이 있는데, 영어 문장 그러니까 영어 단어 시퀀스를 입력받아 프랑스 문장, 프랑스 단어 시퀀스를 출력하는 경우가 있겠다. 이때 입력 시퀀스의 길이도 다양하고, 출력 시퀀스의 길이도 다양할수 있다보니 이 문제를 다 대 다, many to many 문제라고 부른다.
또 다른 타입의 시퀀스 투 시퀀스 문제로 입력 시퀀스를 처리해서 시퀀스의 한 원소 마다 출력하고자 하는 경우도 있는데, 이러한 다 대 다 분류 문제의 예시로 비디오 프레임들을 입력받아 비디오 전체를 보고 하나로 분류하는게 아니라 비디오 프레임마다 각자 분류하는 경우가 있겠다.
자세히 예를 들면 처음 세 프레임에서는 어떤 사람이 농구공을 드리블링 한다고 판단하고, 다음 10 프레임동안은 농구공을 던지는 것으로, 다음 프레임은 공을 던졌으나 실패하는 상황을, 나머지 프레임에서 다른 팀원들에게 야유를 받는 상황으로 이와 같이 여러 이미지 시퀀스를 받아 각 시퀀스마다의 경우를 분류하고자 할수도 있다.
이런 시퀀스를 처리하는 신경망을 만들기 위해선 단일 입력을 받아 단일 출력을 하는 능력을 가질 뿐 만이아니라 입력 시퀀스를 처리해서 출력 시퀀스를 만들어내도록 해야한다.
딥러닝에서 입력과 출력이 시퀀스인 경우 처리하도록 사용할수 있는 일반적인 방법, 도구가 순환 신경망 recurrent neural network이며, 앞으로 다양한 순환 신경망을 가지고 입력/출력 시퀀스를 처리하는 문제들을 어떻게 풀어내는지 알아보자.
여기서 알아야할 중요한 점은 우리가 어떤 문제를 다루던간에 시퀀스의 길이를 모르더라도 임의의 길이(예를 들어 짧은 비디오 프레임이나 아주 긴 비디오 시퀀스)를 처리할수 있는 신경망을 만든다고 할때 순환 신경망이 매우 유용한 방법이며, 심층 신경망 문제에서 다양한 시퀀스를 처리할수 있겠습니다.
하지만 순환 신경망은 비 시퀀스 데이터 처리에도 효과적으로 사용할수가 있습니다. 어떤 연구원들은 순환 신경망을 비 시퀀스 데이터의 시퀀스 처리를 하는데 사용해보았는데, 다음 연구는 몇년 전에 진행된걸로 이미지 분류를 하고 있습니다. 지금까지 배운 내용을 생각해보면 이미지 분류에서는 시퀀스가 존재하지않고 단일 이미지를 입력으로, 단일 카테고리 라벨이 출력으로 되었었습니다.
하지만 이들은 단일 순전파 신경망으로 이미지 분류를 하지않고, 한 이미지가 주어질때 그 이미지를 응시glimpse한 여러개의 경우를 가지고, 한번은 이미지의 한 부분을 보고, 다른 응시때는 그 이미지의 다른 부분을 보고, 시간 변화에 따라 다른 지점을 본 응시들을 사용한 신경망을 만들었습니다.
이 신경망이 이미지에서 어느 부분을 볼지는 이전 타임 스탭으로부터 얻은 정보를 기반하여 판단하며, 아주 많은 부분들을 응시한후에 최종적으로 이 이미지의 물체가 무엇인지 판단을 하게 됩니다.
그래서 이 그림이 신경망 안에서 비 시퀀스 데이터를 가지고 시퀀스 처리를 사용한 예시로 숫자 분류하는 걸 보여주고 있는데, 작은 녹색 사각형들이 신경망이 이미지의 어디를 볼지 선정한 응시 영역이며, 이 응시한 것들을 모아 최종 결정을 하게 됩니다.
비시퀀스 데이터를가지고 시퀀스 처리하는 다른 예시로는 역변환 중 하나인 이미지 생성을 살펴봅시다. 이전 슬라이드에서는 이미지 하나를 입력으로 가지고 와서 여러 응시 결과들을 모아 분류를 했었는데, 이번에는 그와 달리 숫자 이미지를 생성하는 신경망을 만들고자 하며 매 타임 스탭마다 출력 시퀀스로 숫자 이미지를 그려봅시다.
이 신경망에서는 매 시간 마다 어디 다가 그릴것인지, 무엇을 그릴것인지, 어떻게 그릴것인지를 선택해야하며 이러한 비 순차적인 하부 작업들을 한번에 순차적으로 처리하여 숫자 이미지를 출력하도록 신경망을 설계하면 되겠습니다.
이 연구 내용은 (교수님이 강의하기) 2주전에 트위터에서 찾은 건데, 비순차 작업인 이미지 생성을하는 신경망을 만든것으로 오일 페인팅 시뮬레이터와 신경망을 합쳐 순차처리를 하는것을 보여주고 있습니다.
이 연구에서는 사용할 붓을 고르고, 매 시간마다 이전 타임 스탭에서 본것에 따라 어디다가 붓으로 그릴지를 판단하며, 시간이 지남에 따라 이런식으로 예술가가 그린듯한 얼굴 그림이 만들어지게 됩니다.
이런 것들이 순환 신경망을 사용한 예시들로 지금까지 순환 신경망을 통해서 순차적인 데이터를 처리할수도 있고, 기존에 비 순차적으로 처리되던 옛날 문제들을 순차 처리를 통해서 풀수도 있는것을 보았습니다. 그래서 이것들을 보면서 왜 우리가 순환 신경망을 배워야하는지를 충분히 동기 부여가 되었으면 좋겠습니다.
'번역 > 컴퓨터비전딥러닝' 카테고리의 다른 글
딥러닝비전 12. 순환 신경망 - 3. 언어 모델과 역전파 (0) | 2021.03.12 |
---|---|
딥러닝비전 12. 순환 신경망 - 2. 순환 신경망과 계산 그래프 (0) | 2021.03.11 |
딥러닝비전 11. 신경망 학습하기 파트 2 - 3. 학습 후 할 수 있는 일 2(전이학습) (0) | 2021.03.09 |
딥러닝비전 11. 신경망 학습하기 파트 2 - 3. 학습 후 할 수 있는 일 (0) | 2021.03.07 |
딥러닝비전 11. 신경망 학습하기 파트 2 - 2. 하이퍼 파라미터 찾기 choose hyperparameter (0) | 2021.03.06 |