Data/머신러닝 & 딥러닝 21

Object Detection model - R CNN부터 Fast(er) R CNN까지

다음 도표는 딥러닝을 활용한 이미지 내 객체 검출(Object Detection) 모델의 milestone을 찍은 것이다. 최근으로 올수록 새로운 모델들이 점점 많아지는 것을 볼 수 있다.. 오늘은 이 많은 모델들 중 2014 ~ 2016 년까지 발전해온 R-CNN계열 모델인, - R-CNN (2014) - Fast R-CNN (2015) - Faster R-CNN (2016) 에 대해서 정리해보려고 한다. 우선 해당 모델들을 이해하는 데 필요한 개념 먼저 짚고 가보려고 한다. ▶ 사물인식 방법 이미지 내에서 사물을 인식할 때 대표적으로 다음 네가지 방법이 존재한다. Classification : 하나의 이미지를 입력으로 받은 후 해당 이미지가 어떤 클래스에 해당하는지 분류하는 방법이다. Classifi..

CNN 모델 훑어보기

▶ 네트워크 모델의 발전 파라미터 수가 많으면 overfitting의 문제가 발생한다. 따라서 네트워크 모델은 이 파라미터 수를 줄여 일반화 성능을 올리는 방향으로 발전해왔다. 이와 동시에 네트워크 깊이는 키움으로써 더 딥한 학습을 가능케하는 방향으로 발전되어왔다. 해당 포스팅에서는 - AlexNet - VGGNet - GoogLeNet - ResNet - DenseNet 순으로 모델의 발전과정을 짚어보고자 한다. ▶ AlexNet - 네트워크가 2개로 나눠져있다. 당시 GPU숫자가 부족했기 때문에 2개의 GPU를 최대로 사용하기 위해 이러한 구조가 나온것이라고 한다. - 11 x 11의 input을 사용한다. 이 필터를 사용하면 하나의 kernal이 볼 수 있는 영역은 커지지만 상대적으로 파라미터는 더..

Partial Dependence Plot (PDP) 란?

▶ Partial Dependence Plot이란? 기본적으로 tree기반의 모델은 선형회귀분석 같이 함수식을 통해 입력과 출력의 관계를 알기 힘들다. tree기반 모델은 information gain을 기준으로 샘플을 부분집합으로 나누는데 집중하기 때문이다. 따라서 tree기반의 모델 중 하나인 RandomForest는 black box모델(어떻게, 무엇을 근거로 모델의 결과가 도출되었는지 알 수 없는 모델)까지는 아니지만 선형모델이나 일반 tree모델에 비해서는 해석이 어렵다. PDP(Partial Dependence Plot)은 이러한 모델에서 입력과 출력의 관계를 알아볼 수 있도록 시각화하는 그래프이다. 이 그래프는 입력과 출력의 직접적인 관계를 추론하지는 않는다. 대신 하나 혹은 두 개의 변수가..

OOM (Out Of Memory) 해결 방법

▶ OOM OutOfMemory, 학습을 시키다보면 적지않게 마주치는 에러이다. 이 에러를 보면 배치 사이즈를 줄이거나 캐시를 비우는 방식으로 처리했었는데 그 이외의 방법들(?)도 알게되어 포스팅으로 정리해보려한다. ▷ GPUtil 활용하기 - iter마다 메모리가 늘어나는지 확인할 수 있는 모듈이다. - nvidia-smi처럼 GPU 상태를 보여주는 모듈이다. 다만 nvidia-smi는 현재시점의 스냅샷을 보여줄 순 있지만 iteration이 돌아가며 쌓이는 메모리는 보여줄 수 없다. 반면 GPU util은 이를 보여줄 수 있다. - nvidia smi output 예시 아래와 같이 특정 timestamp에 해당하는 gpu의 상태를 확인할 수 있다. - GPUtil 예시 아래와 같이 GPU ID, 사용..

Custom Dataset tutorial - Fashion MNIST

Dataset과 Dataloader로 fashion- MNIST데이터를 불러오고 커스텀하는 방법을 실습해보았다. 코드는 pytorch tutorials에서 다운받을 수 있다. ▶ Fasion MNIST 60,000개의 train과 10,000개의 test 데이터로 이뤄져있다. 각각의 예제는 28x28의 흑백이미지로 구성된다. 라벨은 총 10개의 클래스로 이뤄져 있다. 데이터 셋은 torchvision의 datasets에서 다운받을 수 있다. datasets.FashionMNIST에 들어가는 인자는 다음과 같다. - root: train과 test데이터 셋이 저장될 장소 - train: train 데이터인지 test데이터인지 bool로 설정 - download= True: 인터넷에서 다운로드 받을건지 bo..

순전파와 역전파

역전파는 해당 층과 연관되는 관계를 따라서 그래프를 계산하고, 그 경로에 있는 모든 변수값들을 저장해놓고 활용해야한다. 따라서 역전파는 순전파보다 훨씬 더 많은 메모리를 사용할 수 밖에 없다. 본 포스팅에서는 역전파의 원리에 대해서 이해하고자 링크된 페이지를 참고하여 작성한 글이다. 아래 플로우는 역전파 순서를 기준으로 작성한 것이며 해당 역전파계산과 관련된 순전파 계산을 함께 제시해서 역전파 계산 이해에 도움이 되도록 작성해보았다. 아래 그래프를 참고하며 계산을 따라가면 이해가 더 수월하다. 목적함수 J는 손실함수 L과 l2 norm 정규화항 s를 더한 정규화된 손실값이다. J를 L과 s에 대해서 각각 미분해준다. 이전의 은닉벡터 h에 가중치 w2를 곱한 값인 o와 실제값 y의 손실값을 계산한다. 출력..

그레디언트와 경사하강법

밑바닥부터 시작하는 딥러닝을 교재로 한 딥러닝 I 강의 내용을 정리하고자 작성한 포스팅입니다. ▶ 모델 학습의 목표: 손실함수를 최소로 만드는 것이 목표로 정확도가 높은 모델을 만들기 위한 학습이 이뤄져야 한다. ▷ 손실함수를 최소로 만드는 것의 의미 손실함수를 최소로 만든다는 말은 손실함수의 변수(가중치와 편향)가 1차원일 때는 다음 그래프와 같이 기울기가 0인 지점에서 가장 최소값 _ 는 의미이다. 그러나 일반적으로 모델에서 변수를 하나만을 가지는 경우는 없다. 즉 적어도 2개의 변수, 2차원에서 손실함수의 최솟값을 찾아야한다. 손실함수가 2개의변수를 가진다고 할 때 최솟값은 다음과 같이 찾을 수 있다. 여기서 z는 접평면의 방정식으로 3차원에서 손실함수의 최솟값은 이 방정식을 상수 k로 만드는, 즉..

심층 신경망 성능 향상시키기(3)/하이퍼파라미터 튜닝

부스트 코스의 딥러닝 2단계: 심층 신경망 성능 향상시키기 강의를 수강하며 내용정리한 포스팅입니다. ▶ 하이퍼파라미터 신경망을 학습할때 튜닝해야하는 하이퍼파라미터는 학습률, 모멘텀, 아담 최적화알고리즘의 ε과 β1, β2, 층 수, 은닉 유닛 숫자, 학습률 감쇠(learning rate decay), 미니 배치 사이즈 등 무척 많다. 직관에 따라 하이퍼파라미터 튜닝의 중요도를 순서대로 정리하면 다음과 같다. 1순위: 학습률 2순위: 모멘텀, 미니배치 사이즈, 은닉 유닛 수 3순위: 층 수, 학습률 감쇠 (아담 알고리즘의 ε은 10^-8, β1은 0.9, β2는 0.999를 항상 사용하지만 원한다면 튜닝해도 좋다.) ▶ 딥러닝에서의 하이퍼파라미터 튜닝 하이퍼파라미터의 수가 적을 때는 그리드 서치를 통해 최..

RNN과 게이팅

파이토치로 배우는 자연어처리 책을 참고하여 작성했습니다. ▶ 엘만 RNN의 문제점 엘만 RNN은 그림1과 같이 이전 셀에서의 은닉벡터와 현재 셀의 입력 벡터를 사용해 타임스텝마다 은닉상태 벡터를 계산하는 과정을 가진다. 따라서 RNN은 이전 정보를 현재에도 반영함으로써 자연어처리에서 시퀀스 데이터인 언어를 이해하는데 유용하게 사용될 수 있다. 그러나 RNN은 다음과 같은 문제점들을 가진다. 1. 현재 타임스텝에서 멀리 떨어져 있는 정보를 유지하기 어렵다. : RNN에선 시퀀스에 있는 모든 입력벡터를 모델에 넣는다. 즉 모델 학습에 유익한 정보이든 아니든 간에 무조건 다 입력으로 넣고본다. 이런 경우 모델이 주어진 task를 수행하는데 쓸모없는 데이터들의 정보까지 반영되기 때문에 비효율적인 학습이 될 수 ..