논문명: Network In Network 논문저자: Min Lin 외 2명 개요 본 논문의 전체적인 내용은 CNN(합성곱 신경망)의 단점과 그것의 보완점을 제시한다. 1. 논문에서 제시된 기존 CNN 구조의 문제점 본 논문에서 제시된 기존 CNN 구조의 문제점은 크게 2가지이다. 첫째 컨볼루션(convolution) 레이어에서는 기존의 입력값을 특징 맵으로 변환하는 과정을 거친다. ㄷ이때 기존의 CNN구조에서는 선형적으로 변환을 진행한다. 선형적으로만 변환을 진행하면 당연히 비선형적 연산에 비해 정확도가 떨어 질 수 밖에 없다. 따라서 본 논문에서는 이를 보완하기 위한 방법으로 다증퍼셉트론(MLP)를 도입했다. 구조는 다음과 같다. 위와 같은 구조를 통해 기존의 선형 연산이였던 것을 비선형 연산을 통해 정확도를 높인것을 본 논문에서는 MLPconvolutional Layer 라고 칭하며 이 Layer들이 쌓여있는 것이 NIN(Network in Network)구조이다. 둘째 마지막 출력 부분(또는 레이어)에서 완전연결 계층의 문제점이다. 가장 큰 문제는 CNN자체가 입체적인 데이터를 다루는데 이런식으로 연결되면 입체적인 INPUT과 거리감이 생긴다는 것이고 다음으로는 완전연결 계층 그 자체의 문제인 Overfitting 문제가 있다. 따라서 본 논문에서는 Global Average Pooling 이라는 레이어를 사용했다. 간략히 설명하면 마지막 출력부분에서 완전연결 계층을 대신해 각각의 Classification에 사용될 category를 특성맵으로 만들고 전부 평균을 내어 softmax함수에 집어 넣어 출력하는 방식으로 진행했다. 구조를 보면 다음과 같다. 위에 보다 싶이 완전연결계층이 아닌 각각의 특성 맵을 만들어 이를 softmax함수에 넣는 것을 볼 수 있다. 이를 통해 좀 더 입력값에 건장해지고 더해서 오버피팅을 방지할수 있다는 장점이 있다. 총 구조 총 구조는 다음...
1. 선형성을 띄지 않는 함수가 없는 다중층 레이어 신경망은 선형적으로 표현 가능하다는 것을 증명하시오. HINT: n개의 레이어의 경우를 두고 생각, f(x) = ax+b의 형태로 두고 생각 (개인 풀이) 1. f(x) = ax + b이다. 이때 n=2 즉 2개의 층으로 이루워졌다고 생각하면 f(f(x)) = a(ax+b)+b = a^2x+ab+b = a'x + b' (a'=a^2, b'= ab + b) 즉 값이 동일하지는 않지만 사실상 선형성을 띄는 식으로 표현이 가능하다. 이제 n일때의 경우를 보면 fn(x) = a*fn-1(x)+b가 된다. 즉 사실상 형태가 반복되는 동일한 상황이므로 증명된다. 2. 시그모이드함수를 미분하시오. HINT: sigmod = 1/(1+e^-x) (개인풀이) 2. 0*(1+e^-x) - 1*(-e^x) / (1+e^-x)^2 = e^x / (1+e^-x)^2 3. 많은 층을 사용할 경우 시그모이드함수에서 기울기 소실이 일어나는 이유는? (개인풀이) 3. 기울기 소실의 경우 시그모이드 함수의 특징 중 하나이다. 시그모이드 함수의 경우 일반적인 시그모이드 함수 시그모이드 함수의 미분 형태 위에 그래프에서 보이듯이 시그모이드 함수는 수렴한다. 값이 극단적으로 커져감에 따라 수렴하는데 가중치를 변경하는 방법에서 가중치를 미분한 값을 곱하는 형식에서 미분한 값이 점점 작아질 수 밖에 없다는 단점을 가지고 이것이 바로 기울기 소실이다. 3.2 하이퍼볼라탄젠트함수와 시그모이드 함수의 관계가 scaled,shifted 형태이고 위의 기울기 소실에서 하이퍼볼라탄젠트 함수가 더 유리한 이유를 설명하시오 (개인풀이) 3.2 기본적인 하이퍼볼라 탄젠트 함수 미분형태의 하이퍼볼라 탄젠트 함수 위에 보다싶이 하이퍼볼라 탄젠트 함수는 수렴하지 않으므로 기울기 소실이 덜하다 하지만 극단적인 값으로 가면 0으로 수렴하기 때문에 기울기 소실에서 자유로울 수는 없다...
1. 카카오 API 사용을 통한 토큰 발급 일단 카카오 로그인을 구현하려면 카카오에서 제공하는 api를 이용해야 했다. https://developers.kakao.com/docs/latest/ko/message/rest-api 공식 카카오톡 api 문서이다. 이전에 말했던 대로 우리는 사업자 등록이 5월로 예정되어있어 아직 카카오톡으로 전화번호 등 몇몇 필요한 정보를 가져올 수는 없었다. 따라서 카카오톡 선택 요구 정보를 프로필, 성별, 이메일로 한 후 토큰 발급을 실행했다. 전체적인 프로세스는 다음과 같았다. (첫 등록일 경우) 첫 등록 확인 - join 등록, 카카오톡에 인증 요청 - 카카오톡 토큰 발급 완료시 - 토큰 처리해 - 필요 정보 확인 후 자동 회원가입 (기존 사용자의 경우) 기존에 등록 확인 - kakao login 등록 - 카카오톡 로그인 - 인증 완료시 프로젝트 로그인 토큰 발급까지 연동 첫 등록의 경우 기존의 회원가입 미들웨어를 이용함과 동시에 위의 카카오 api를 이용하여 새로운 엔드포인트를 만들었다. 기존 사용자의 경우 조금 복잡하게 구현하다 카카오에서 발급 받은 토큰에서 정보를 읽어 기존의 사용자인지 확인하는 미들웨어를 짜고 구현해두었던 로그인 토큰 발급과 연결해서 새로운 엔드 포인트를 만드는 방식으로 해결하였다. 2. 벡엔드 관리, 보수 기존의 sms send 모듈에 관련하여 네이버 api 계정의 등록자 변경관련 논의와 현재 있는 미들웨어들의 표시형식 통일, 중복 부분 수정 등의 작업을 따로 진행했다. 또한 카카오톡 로그인 구현 중 로그인 에러가 나와 그것 또한 수정했다. 3. 개발환경 개발은 github,VScode, postman, mongoDB를 활용해 진행하고 있으며 특히 카카오 Api를 실험하는데 가상으로 토큰을 발급받고 인증하는 것이 가능한 postman이 큰 도움이 되었다. 4. 팀을 떠나며 초기에 아무...
댓글
댓글 쓰기