목록학습 (9)
Broccoli's House
7회차 - (1) 학습 모델 구성 : 단순 모델 컬러 이미지 - 앞서 흑백 이미지로 데이터를 모아서, 학습 모델을 구성하여 학습을 시켰다. 그러나 코스트(Cost) 즉, 오차 값이 굉장히 큰 값에서 수렴하여 줄어들지 않았다. 실제로는 모델 구성에 오류가 있었으나, 데이터가 워낙 많고 모델도 복잡하게 구성하다보니 오류를 찾기가 쉽지 않았다. 따라서 적은 데이터와 비교적 간단한 모델로 학습을 하여 어느 정도의 성능을 확인한 다음, 데이터를 많이 모으고 모델을 더 복잡하게 하기로 하였다. - 이미지의 수를 적게 하기로 했기 때문에, 흑백 보다는 컬러 이미지로 다시 데이터를 모았다. 컬러 이미지와 흑백 이미지의 가장 큰 차이는 이미지의 개수가 같다하여도 컬러 이미지는 RGB, 3채널이기 때문에 흑백 이미지보다 ..
6회차 - (1) 훈련 데이터 수집 완료 텍스트 파일 불러오기 - 훈련 데이터를 수집할 때 로지텍 G27로부터 파이썬 라이브러리 Pygame을 이용하여 조향 데이터와 브레이크 데이터, 스로틀 데이터를 받아와 텍스트 파일로 저장하였다. 이 데이터들은 각 이미지에 대한 레이블(label)이 된다. 학습을 위해 텍스트 파일로부터 각 데이터들을 리스트의 형태로 받아온다. path = '~/Training Data/' # 훈련 데이터가 저장된 경로 선언 Text_steering = open("%sSteering_Data.txt" % path, 'r') # 조향 데이터 텍스트 파일 오픈 Text_throttle = open("%sThrottle_Data.txt" % path, 'r') # 스로틀 데이터 텍스트 파일..
5회차 - (5) 훈련 데이터 수집 완료 훈련 데이터 수집 완료 - TORCS의 훈련 트랙 하나를 2번씩 돌면서 이미지와 조향 데이터 등의 훈련 데이터를 모은다. 트랙의 길이마다 조금씩 다르지만 레이스 한 번을 완료하면 대략 3,000개의 훈련 데이터가 모인다. 전체 훈련 트랙 8개를 하나의 트랙당 2바퀴씩 도는 레이스를 8번씩, 총 64번의 레이스, 128바퀴의 훈련 데이트를 모으는 것을 완수하였다. - 훈련 이미지, 조향 데이터, 브레이크 및 스로틀 데이터를 각각 180,900개 모았다. 당초 예상했던 20만개에 살짝 못미치지만 동일한 트랙을 다시 돌면서 데이터를 2만개 더 채워넣는 것은 무의미해 보였기에 18만개 가량에서 데이터 수집을 멈추었다. 학습 시에 배치의 크기를 100개로 할 계획이기 때문..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 학습 관련 기술 : 배치 정규화 배치 정규화 - 배치 정규화(Batch Normalization) : 신경망의 골치 아픈 점은 바로 기울기 소실 문제(Gradient Vanishing Problem)이 발생한다는 것이다. 이 문제를 해결하기 위하여 시그모이드(sigmoid)나 하이퍼탄젠트(tanh) 함수에서 렐루(ReLU)로의 활성화 함수 변화, 가중치의 초기값 설정 등의 방식을 채용하였다. 가중치의 초기값을 적절히 설정하면 각 층의 활성화 값 분포가 적당히 퍼지면서 학습이 원활하게 수행된다. 이러한 점에 착안하여 각 층의 활성화 값을 강제로 퍼뜨리는 것이 바로 배치 정규화이다. - 보통의 경우 신경망 모델에 데이터를 입력하기 전에 전체 데이터 ..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 학습 관련 기술 : 매개변수 갱신 매개변수 갱신 - 최적화(Optimization) : 학습 모델과 실제 레이블과의 차이는 손실 함수로 표현되며, 학습의 목적은 오차, 손실 함수의 값을 최대한 작게 하도록하는 매개변수(가중치, 편향)를 찾는 것이다. 즉, 매개변수의 최적값을 찾는 문제이며, 이러한 문제를 푸는 것을 최적화라 한다. - 손실 함수를 최소화하는 매개변수를 찾는 방법에는 여러 가지가 있다. 가장 간단하게는 손실 함수의 그래프에서 가장 낮은 지점을 찾아가도록 손실 함수의 기울기를 구해 최적값을 찾아가는 확률적 경사 하강법(SGD)과 이 방법의 단점을 보완한 모멘텀 및 AdaGrad, Adam 방법 등이 있다. 이것들을 하나하나 알아보도록..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 오차역전파법 : 소개 오차역전파법 - 오차역전파법(Back Propagation) : 신경망 학습에서, 신경망의 가중치(weight)에 대한 손실 함수의 기울기를 구하기 위해 미분을 사용했다. 미분 계산은 단순하고 구현하기 쉽지만, 시간이 오래걸리는 단점이 존재한다. 즉 초기 가중치에서의 손실 함수를 계산하고 그것을 미분하여 다음 가중치 계산에 사용하는데, 뉴런이 많아져 각 노드의 매개변수(가중치, 편향)가 많아지면 그 모든 매개변수를 학습시키기란 매우 어렵다는 것이다. 이것을 효율적으로 하기 위한 것이 오차역전파 알고리즘이다. - 학습이란 각 뉴런의 매개변수(가중치, 편향)에 의해 계산된 최종 출력을 토대로 손실함수(데이터의 레이블과 실제 출력..
4회차 - (3) TORCS : 설치 및 설정 TORCS - TORCS(The Open Racing Car Simulator) : TORCS는 리눅스, 윈도우같은 여러 운영체제에서 사용할 수 있는 오픈 소스로 된 3D 차량 레이싱 시뮬레이터이다. C++로 만들어졌으며, OpenGL로 그래픽을 렌더링한다. 20년 전인 1997년도에 만들어졌지만 현재까지도 여러 차량 시뮬레이션에 사용되는 프로그램이다. - 20년 전의 게임인 만큼, 그래픽이 Microsoft의 AirSim만큼 화려하지 않고 오히려 매우 단조롭다. 그렇기 때문에 오히려 영상 처리나 학습 모델을 만들어 학습하는 것이 편리할 수 있다. 또한 출시된 기간이 오래되었으므로 여러 예제들이 존재하고, 대회가 있어 아직도 커뮤니티가 존재한다. 가장 중요한..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 신경망 학습 : 손실 함수 손실 함수 - 손실 함수(cost function) : 손실 함수란 신경망이 학습할 수 있도록 해주는 지표이다. 머신러닝 모델의 출력값과 사용자가 원하는 출력값의 차이, 즉 오차를 말한다. 이 손실 함수 값이 최소화되도록 하는 가중치와 편향을 찾는 것이 바로 학습이다. 일반적인 손실 함수로 평균 제곱 오차나 교차 엔트로피 오차를 사용한다. 평균 제곱 오차 - 평균 제곱 오차(Mean Squared Error : MSE) : 계산이 간편하여 가장 많이 사용되는 손실 함수이다. 기본적으로 모델의 출력 값과 사용자가 원하는 출력 값 사이의 거리 차이를 오차로 사용한다. 그러나 오차를 계산할 때 단순히 거리 차이를 합산하여 평..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 신경망 학습 학습 - 학습(Learning) : 신경망의 각 노드들은 입력에 가중치를 곱하여 편향을 더한 값을 활성화 함수를 거쳐 출력한다. 학습이란, 신경망 모델의 출력이 사용자가 원하는 값에 수렴하도록 수많은 노드들이 가지고 있는 각각의 가중치와 편향들을 자동으로 획득하는 것을 말한다. 즉, 사용자가 원하는 출력과 모델의 출력이 동일시되거나 수긍할만한 오차에 수렴하는 가중치와 편향을 알아서 찾아가는 것이 바로 머신러닝의 학습이다. - 손실함수(cost function) : 손실 함수는 신경망이 학습할 수 있도록 해주는 지표이다. 사용자가 원하는 출력과 머신러닝 모델 출력 값의 차이 즉, 오차를 말한다. 일반적으로 이 손실 함수 값이 최소화되도..