I. 튜닝 프로세스 신경망을 학습시킬 때 여러 가지 하이퍼파라미터가 관여한다. 여기서 하이퍼파라미터는 파라미터와 명확하게 다른 개념이다. 파라미터는 모델 내부에서 결정되는 변수를 뜻하고 하이퍼파라미터는 모델링을 할 때 사용자가 직접 세팅해주는 값을 뜻한다. 딥러닝에는 다양한 하이퍼파라미터가 존재한다. 상황에 따라 다를 수도 있지만 보통 우선 조정하는 순서로 나열해보면 다음과 같다. - 학습률 - 모멘텀(Momentum) - 학습률 (α) - 모멘텀(Momentum) 알고리즘의 β - 은닉 유닛의 수 - 미니배치 크기 - 은닉층의 갯수 - 학습률 감쇠(learning rate decay) 정도 - 아담(Adam) 알고리즘의 β1, β2, ϵ 이렇게 다양한 하이퍼파라미터가 존재하는데 심층 신경망을 학습 시킬..
머신러닝
for-loop를 이용하여 계산하면 굉장히 시간이 오래걸려서 가급적 동시에 처리할 수 있도록 벡터화를 통해 하나의 instruction으로 연산할 수 있도록 vectorization을 해주어야한다. 위 그림을 보면 두번째 레이어에서 weight 5개가 있고 그 weight 5개를 아래와 같이 벡터라이제이션 해준다. 위 그림은 레이어 하나 안에 있는 한 뉴런인데, 뉴런안에 있는 weight, 인풋, 아웃풋 등을 전부 아래의 식에서 나온 것과 같이 벡터라이제이션을 해줘야한다. ※ 벡터라이제이션에 대한 내용은 실습 시 코드를 짤 때도 벡터의 크기를 맞추는 것이 매우 중요하니 공부해둘 필요가 있다.
feature, label로 학습을 하는 지도학습과 달리 오직 feature만으로도 학습이 된다는 점이 신기하다. 에듀윗 부산대 강의에서는 클러스터링 기법은 계층적 군집 방식과 비계층적 군집방식의 k-means 방식에 대해 배웠다. 그리고 추가적으로 찾아보니 위의 방식같은 분류뿐만 아니라, 차원축소에도 비지도학습이 사용된다고한다. 여기서의 '차원축소' 란 시각화를 위해 데이터셋을 2차원으로 변경하거나 이미지 데이터를 압축하는 경우가 있다. 이 차원축소의 대표적인 방식이 PCA,주성분 분석 방식이 있다.
RNN = 순환신경망 - 현재 스텝의 출력이 다음 스텝의 입력이 됨 - 정보가 계속 도는 구조 - 매 시퀀스에서 RNN 모델은 현재의 입력뿐 만 아니라 이전 스텝의 요소들을 기억하고 활용함 - 고정길이보다 임의의 길이의 시퀀스를 다룰 때 효과적 순환구조 t-3시간 때 x에서 인풋 y쪽으로 아웃풋 그 y는 y(t-3) 이것은 다시 x(t-2)와 함께 다시 한번 인풋으로 들어감 아웃풋 신호가 다시 인풋으로 들어감 메모리 셀 = x와 y사이의 은닉 셀 1) seq to seq : 가장 기본적 2) seq to vector 입력은 x0~x3로 4개, but 출력은 1개 1번은 모든 데이터가 들어와서 현재시간에 모든 데이터를 출력으로 잡아줘야함 2번은 과거의 데이터를 이용해서 미래를 예측할 때, 과거의 데..
활성화 함수 활성화 함수는 인공신경망에서 입력 값에 대해서 가중치를 곱한 뒤 적용하는 함수를 의미한다. 예를 들어, - 계단 함수(Step Function) - 시그모이드(Sigmoid) - tanh 함수(Hyperbolic tangent function) - ReLU(Rectified Linear Unit) - Leakly ReLU - PReLU - ELU(Exponential Linear Unit) - Maxout 함수 - 항등 함수(Identity Function) - 소프트맥스 함수(Softmax Function) 등이 있다. 신경망은 입력층, 은닉층, 출력층으로 구성되는데, 선형함수를 사용할 경우에는 은닉층을 사용할 수 X. 즉, 선형함수를 여러층으로 구성하더라도 결국은 선형함수를 그저 여러번 ..
벡터화 일반적으로 평소에 코딩할 때 for문을 정말 자주 사용하는데, 딥러닝의 구현에 있어서는 for문의 사용은 코드 실행을 느려지게 만들 수 있다. numpy 내장함수를 사용하게 되면 for문을 사용할 때보다 훨씬 빨라질 수 있다. 그렇기 때문에 일단 for문을 쓰고 싶다면 그 공식을 쓰지 않고 numpy 내장 함수를 사용할 수 있는지 먼저 확인을 해야함 만약 코드를 벡터화하지 않는다면, 위와 같이 Z = wx + b를 구현하기 위하여 z = 0으로 초기화시킨 후 for문을 반복적으로 계산해야한다. 반면, 코드를 벡터화했을 경우에는 파이썬의 라이브러리 함수를 통해 위와 같이 간단하게 한 줄로 표현가능하다. 위 코드는 로지스틱 회귀의 도함수를 구하는 코드이다. 위 코드에서는 for문이 2번 나타난..
- numpy.array() : 배열 생성 - numpy.ndim() : 차원 출력 - numpy.zeros() : 0으로 채워진 배열 생성 numpy.ones() : 1로 채워진 배열 생성 - numpy.sqrt() : 배열 원소들 제곱근 구하기 numpy.square(): 배열 원소들 제곱하기 - numpy.init64() : 데이터 타입 변환시키기 (cf. numpy.float64()) - numpy.transpose() : 배열 전치 - numpy.mean() : 배열 원소의 평균 numpy.var() : 배열원소의 분산 numpy.std() : 배열 원소의 표준편차 - numpy.around( ): 배열원소의 반올림 numpy.ceil() : 올림 numpy.floor(): 내림 - numpy...