뱀게임 인공지능을 만들어보자.(2)
·
프로그래밍/머신러닝
뱀 게임 인공지능을 만들어보자(1) 이전의 결말대로, 이동방향에 대한 뱀 머리, 몸통을 따로 레이블을 매칭 시켜서 답을 보려 했다. 그런데, 이게 잘 안되었다. 뱀이 계속해서 도는 것도 못하고 오른쪽 벽으로 박으면서 학습이 안되고 있었다. 그래서 다른 방법을 고민해 보았다. 입력 크기를 줄이는 것이다. 난이도가 엄청 쉬워지겠지만, 이왕 잘 안되는 거 쉬운 것부터 해보고 싶다. 입력은 8개로, 뱀 머리를 기준으로 먹이가 있는 위치를 입력으로 전달해줬다. (위 사진의 빨간색 테두리로 강조한 것) 모델의 형태는 아래와 같이 구성했다. (중간은 relu, 마지막은 sigmoid, 학습은 Adam) 모델이 먹이를 먹으면 1점을 보상으로 주고, 벽에 박거나 자신의 꼬리에 박으면 -100점을 보상했다. 대략 500 ..
[정규화] Batch Normalization
·
프로그래밍/머신러닝
* 본 내용은 공부한 것을 정리한 글이므로, 오류가 있을 수 있습니다. Internal covariate shift Internal covariate shift는 번역하면 '내부 공변량 변화'으로, 데이터가 모델에 입력으로 들어갈때, 은닉층의 입력 분포가 다르다는 것이다.(입력은 정규화 할 수 있다.) 내부 레이어의 입력은 이전 레이어의 출력과 같으므로, 학습할 때마다 가중치 값이 변하고 분포는 또 바뀌게 된다. Batch Normalization을 하게 된 이유가 이러한 문제를 해결하기 위함이였다. Batch Normalization 논문에서는 입력 데이터의 정규화 처럼 은닉층의 입력도 정규화를 하면, 안정적으로 학습이 가능할 것 이라는 것으로 생각했다. (실제로도 그렇고) 그렇다면 어떻게 정규화를 할..
[컨볼루션] ShuffleNet
·
프로그래밍/머신러닝
*본 내용은 공부 정리용으로 작성되었으며, 내용에 오류가 있을 수도 있습니다. ShuffleNet ShuffleNet은 기존 MobileNet과 같은 이유로 만들어졌다. 주요 목적은 변수와 연산량을 줄이는 것으로, MobileNet에선 Depth-wise separable convolution을 썼지만 이번엔 Group convolution과 Channel Shuffle을 사용한다. MobileNet과 Depth-wise separable convolution, Group convolution에 대해선 이전에 포스팅 한 것이 있다. Group convolution Group Convolution은 전에 AlexNet에서 사용되었는데, 그 때에는 GPU의 성능 한계 때문에 병렬처리를 위해 channel을 ..
[컨볼루션] Group convolution
·
프로그래밍/머신러닝
Group convolution group convolution은 입력의 채널들을 여러개의 그룹으로 나누어 convolution을 수행하는 방식이다. 왜 이런 방식을 쓰는 것일까? 그룹이 독립적으로 나누어 계산되기 때문에, 병렬처리에 유리하고 변수가 적게 쓰인다. 변수개수는 다음과 같다(K = 필터크기, N = 출력채널크기, M = 입력채널크기, g = 그룹 개수) g개의 그룹이 입력채널M/g에서 출력채널N/g을 생성한다. $$g*K^2 \frac{N}{g} * \frac{M}{g} = \frac{K^2NM}{g}$$ AlexNet에서도 사용이 되었는데, 그땐 GPU의 성능이 부족해서 병렬처리 & 적은 변수를 위해 사용했었다.
[컨볼루션] Mobilenet
·
프로그래밍/머신러닝
* 다음은 공부용으로 기록된 것으로 내용에 오류가 있을 수 있습니다. 오늘은 무거운 CNN 모델을 임베디드나, 휴대폰 환경에서 극복하기 위해 개발된 2개의 모델을 살펴보겠다. Mobilenet Mobilenet은 2017년에 발표된 논문에서 처음 소개 되었으며, 저번에 설명했던 Depth-wise separable convolution를 사용해서 경량화한 모델이다. 기존 CNN 모델인 VGG-16과 비교해 보면, 먼저 3x3 -> 1x1 필터를 적용한 것을 보아 Mobilenet에서 depthwise separable convolution을 사용한 것을 알 수 있고, pooling을 stride 2로 대신했다. pooling과정도 줄어들고, depthwise separable convolution을 사용..
[컴퓨터 비전] SRCNN, Image Super-Resolution Using Deep Convolutional Networks
·
프로그래밍/머신러닝
* 공부용으로 정리한 것으로 내용에 오류가 있을 수 있습니다. SRCNN, Image Super-Resolution Using Deep Convolutional Networks 이 논문은 2015년에 발표되었으며 Super Resolution에 최초로 딥러닝을 적용한 논문이다. 꽤 간단한 구조를 가졌는데, 각 단계는 3단계로 이루어진다. L1. Patch extraction and representation 저해상도 이미지에서 Patch를 추출한다. Patch는 특징을 의미한다. (Y는 입력이미지, W는 가중치, B는 bais) $$F_{1}(Y) = max(0, W_1*Y+B_1)$$ L2. Non-linear mapping 다차원 저해상도 Patch 백터를 다른 다차원 고해상도 Patch 백터로 맵핑..
[컨볼루션] Depthwise separable convolution
·
프로그래밍/머신러닝
* 본 내용은 공부 정리용으로 작성된 것이며 오류가 있을 수 있습니다. Nomal Convolution 기존 convolution에서 연산량은 아래와 같다. (K = 필터크기, N = 출력채널크기, Iw, Ih = 입력크기, M = 입력채널크기) $$ K^{2}MNI_{w}I_{h} $$ 따라서 위의 예제의 연산량은 $ 3^2*N*3*8*8 = 1,728N $ (N=1)이다. 이렇게 출력 채널이 작아지는 경우도 있지만, 특성지도를 더 늘리기 위해 채널의 수를 늘리는 경우도 있다. (N>1인 경우) N을 다른 방식으로 처리해서 기존 방식보다 곱셈연산을 줄인 방식이 아래에 나와있다. Dept-wise convolution Depth-wise convolution은 채널을 분리해서 컨볼루션 연산을 적용한 뒤,..
[컨볼루션] Dilated Convolution
·
프로그래밍/머신러닝
* 공부/취미용으로 작성하였기 때문에 자세하지 않고, 본 내용에 오류가 있을 수 있습니다. 이미지에서 사물의 크기가 크거나 이미지 해상도가 큰 등의 이유로, 전체적인 특성을 잡기 위해 필터의 크기를 키워야 할 때가 있다. 필터의 크기가 너무 크면, 연산량이 많아져서 너무 부담스럽다. 그래서 pooling 연산을 통해 이미지 크기를 줄이고, 작아진 이미지에 conv 연산을 수행했다. 하지만, 이러면 당연히 기존 정보의 손실이 일어나기 때문에, Dilated Convolution이라는 새로운 방식이 나왔다. Dilated Convolution은 Conv필터 내부에 Zero값을 추가해서 Receptive field를 늘리는 방식이다. 이렇게 하면, 입력 이미지를 줄일 필요도 없으며, 연산량이 증가하지도 않는다..
2jun0
'프로그래밍/머신러닝' 카테고리의 글 목록