반응형

딥러닝 5

딥러닝 모델 경량화 기술

참고자료 [1] 경량 딥러닝 기술 동향, ETRI 2019, 이용주, 문용혁, 박준용, 민옥기, DOI: 10.22648/ETRI.2019.J.340205 최근 GPU기반의 컴퓨팅 기술을 활용하여 다양한 딥러닝 모델이 만들어지고 있다. 하지만, 실제 디바이스나 IoT 센서에서 활용하기에는 모델이 무겁고 연산량이 많다. 경량 딥러닝 연구는 기존의 학습된 모델의 정확도를 유지하면서 크기가 작고 연산을 간소화하는 기술로 알고리즘 자체를 효율적으로 설계하거나 만들어진 모델의 파라미터를 줄이는 방법으로 나뉜다. 경량 알고리즘 : 컨볼루션 신경망의 경우, 주로 합성곱 연산량을 줄이기 위한 방법을 사용한다. Resnet, Densenet : 기존 신경망 모델 구조에서 단일 층별 정보만을 사용하는 것이 아닌 다양한 계..

[Deep Learning] 손실 함수를 통한 학습률 최적화 방법

참고 자료 : http://aikorea.org/cs231n/neural-networks-3/ 손실함수는 신경망이 학습할 수 있도록 나타내는 지표를 의미하며, 모델의 출력 값과 정답 값 간의 오차를 말한다. 딥러닝 모델에 대한 학습을 진행하다 보면, 학습률(Learning Rate)에 따라서 전역 최적값이나 지역 최적값에 도달하게 된다. 왼쪽 그림은 학습률에 따른 에폭 당 손실함수를 나타낸다. 적당한 학습률은 전역 최적 손실값을 얻기 때문에 낮은 값으로 수렴하게 되고, 너무 낮거나 높을 경우 지역 최적값에 빠지게 된다. 오른쪽 그림은 적당한 손실함수의 형태를 보이고 있으며, 위아래로 진동하는 이유는 배치 사이즈가 너무 낮기 때문이다. 그 이유는 모든 데이터에 대하여 그래디언트 업데이트가 수행되면 손실 함..

[Deep Learning] 입력 데이터에서 데이터 정규화를 하는 이유

입력 데이터에 대하여 데이터 정규화(Normalization)를 하는 이유 신경망의 학습을 빠르게 할수 있는 하나의 기법은 입력데이터를 정규화 하는 것이다. 초기 입력데이터의 산포도가 1번 그래프와 같다고 가정해보자. 데이터를 3과 같이 정규화 하기 위해 다음과 같은 과정을 거치게 된다. 먼저, 평균을 빼는 것이다. 1번의 그래프는 2와 같이 0으로 옮겨지게 된다.다음으로, 분포를 일정하게 해준다. 2번 그래프에서 x1의 범위가 x2의 범위보다 비 정상적으로 크기 때문이다.결과적으로 3과 같은 데이터 분포를 얻게 된다.이와 같은 과정을 학습데이터 뿐만 아니라, 테스트 데이터에도 동일하게 적용해야 한다. 그렇다면, 왜 입력 특성을 정규화 해야하는 것일까? 비용함수에 대한 정의는 다음과 같다. 그래프는 최적..

[Pytorch] 선형 레이어와 비선형 레이어

참고 자료[1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김 딥러닝 학습과정 선형 레이어선형 레이어는 여러가지 이름으로 불린다. 다른 프레임워크에서는 덴스 레이어(dense Layer) 또는 연결 레이어(Fully Connected Layer)라고 부르기도 한다. 다수의 복수 레이어를 사용한다는 개념은 각 레이어 마다 입력 데이터의 패턴을 학습하고, 다음 레이어는 앞에서 학습한 패턴을 기반으로 학습을 이어나간다는 것이다. 그러나, 단순히 선형 레이어를 연속으로 여러 개 쌓게 되면 1개 선형 레이어로 간단하게 표현된 학습 결과와 같다. Y = 2(3X) - 2개의 선형 레이어Y = 6(X) - 1개의 선형 레이어 이러한 문제를 해결하기 위해, 여러 비선형 함수를 사용하게 되며 ..

[Pytorch] 딥러닝 신경망에서 사용되는 기본 구조

참고 자료 [1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김 신경망에서 기본 블록으로 사용되는 주요 컴포넌트를 구현해 보았으며, 대부분의 딥러닝 구조는 이러한 큰 틀을 벗어나지 않는다. 각각의 의미를 파악하고, 구조에 대해 미리 학습해보자. 1. 첫 신경망에서의 데이터 준비, 데이터 로딩 2. 학습 파라미터 생성 3. 신경망 모델(네트워크 구현, 오차함수, 신경망 최적화(옵티마이저)) 1. 첫 신경망에서의 데이터 준비, 데이터 로딩 첫 신경망 코드에서 get_data 함수는 변수 2개를 다음과 같이 생성합니다. def get_data(): train_x = np.asarray([1.1,2.2,3,4,5,6,7,8.999,9.555]) train_y = np.asarray([..

반응형