implement_ml_models (94) 썸네일형 리스트형 implement_perceptron 퍼셉트론은 신경망의 최소 단위, 퍼셉트론에는 입력값과 출력값이 존재, n개의 입력값을 합쳐 입력값 벡터 x 로 표현하고, n개의 가중치 값을 합쳐 가중치 벡터 w 라고 한다. 입력값 벡터와 가중치 벡터의 내적값은 출력값 z가 된다. 동그라미는 노드를 의미, 노드는 뉴런에 해당한다. 입력 데이터에 가중치를 곱한 후 더한 값을 가중합이라고 하는데, 이 가중합은 활성화 함수를 거치면서 최종 출력값을 반환한다. 이때, 출력값을 결정하는 함수를 활성화 함수라고 한다. 여기에 임계치를 수정하는 편향을 추가한 모습 전체 과정을 수식으로 표현 기존 가중합에 편향을 더함으로써 최종 출력값에 영향을 줄 수 있다. 퍼셉트론으로 분류 # 입력층 input_data = np.array([[2,3],[5,1]]) x = inpu.. implement_nadam Adam 과 네스테로프 가속 경사를 합친 방법으로 볼 수 있다. J 는 목적 함수, r은 모멘트 파라미터를 의미, n은 학습률을 의미한다. 모멘텀 방법으로 한 스텝의 사이즈와 다음 스텝으로의 방향을 알 수 있다. 여기에 네스테로프 가속 경사 개념을 추가하면 더욱 정확한 스텝을 구할 수 있다. 네스테로프 가속 경사를 변경하는 방법, 기존에는 모멘텀을 업데이트할 때, 그래디언트를 업데이트할 때 한 번, 파라미터로 업데이트할 때 한 번, 총 두 번 적용했지만, 다음과 같이 t 시점의 파라미터를 업데이트하기 위한 모멘텀 벡터를 미리 적용한다. 과거 시점을 사용하는 것이 아닌 현재 시점을 사용한다. implement_adaMax Adam 을 번형한 식을 사용, 아래 식은 L2 norm 을 이용한 식이다. p 값이 커질수록 불안정하게 되는 경향이 있는데, p가 무한대일 경우 안정적인 모습을 보여준다. AdaMax는 L-무한대 제약식을 적용한 방법이다. 적절한 하이퍼파라미터의 값은 n=0.002, B1=0.9, 0.999 이다. implement_adam Adaptive Moment Estimation 의 줄임말, 각 파라미터에 대해 서로 다른 학습률을 업데이트, 과거 그래디언트 제곱의 지수 감소 평균도 적용하고, 추가로 과거 그래디언트의 지수 감소 평균도 적용한다. RMSprop 와 모멘텀을 조합한 방법으로 볼 수 있다. m 은 1차 모멘트인 평균을 추정하고, v 는 2차 모멘트인 분산을 추정한다. 편향을 제거하기 위해 아래와 같은 식을 사용한다. 파라미터 업데이트는 아래와 같이 한다. implement_adagrad Adagrad 는 최적값을 구하려는 각 파라미터의 중요도에 따라 각기 다르게 학습률을 적용하는 방법, 매 시점의 각 가중치에 대해 서로 다른 학습률을 적용 g_t,i 는 시점 t에서 i번째 가중치 파라미터에 대해 적용할 그래디언트를 의미 가중치에 대해 아래와 같이 업데이트 한다. 모든 타임 스텝 t에 대해 가중치를 업데이트하면 아래와 같다. 엡실론 값은 분포가 0이 되는 것을 방지하기 위한 값, G는 대각 행렬로 대각 원소는 가중치의 이전 그래디언트의 제곱합이다. 행렬의 형태로 전체 파라미터에 대해 일반화 implement_nesterovAcceleratedGradient 네스테로프 가속 경사는 모멘텀을 기반으로 하는 방법, 모멘텀에서는 파라미터가 모멘텀만큼 이동, 이 모멘텀을 구하면 대략적인 다음 시점의 파라미터의 위치를 추정할 수 있다. 이를 이용한 방법, 이전의 모멘텀 최적화와 비교 def gradient_momentum(self, x, y): x_b = np.c_[x, np.ones((x.shape[0],1))] # 입력 데이터에 편향값을 위한 1의 추가 self.n_iterations = x.shape[0] for iterations in range(self.n_iterations): if iterations != 0: self.momentum = self.momentum + self.momentum_p * gradients gradients = (2/self.n.. implement_stochasticGradientDescent 트레이닝 데이터 전체에 대해 그레디언트 디센트를 수행하는 것을 배치 그레디언트 디센트라고 한다. 데이터의 크기가 큰 경우, 최적해를 찾는 시간이 길어지고 리소스를 과도하게 차지하게 된다. 이러한 단점을 보완하기 위해 확률적 그레디언트 디센트 Stochastic Gradient Descent 를 사용 전체 데이터가 아닌 전체 데이터에서 추출한 샘플 트레이닝 데이터를 사용한 최적값의 탐색 배치 그레디언트 디센트와 확률적 그래디언트 디센트의 수식 미니 배치 그래디언트 디센트란 사이즈가 작은 배치를 사용, SGD 의 지역 최솟값에 빠질 수 있는 것을 방지 이전의 그레디언트 디센트에서 반복 횟수의 변경으로 수행 가능 def gradient(self, x, y): x_b = np.c_[x, np.ones((x.sh.. implement_momentum 기존의 경사하강법 학습 속도를 가속하기 위한 방법 중 모멘텀 momentum, 다음의 수식을 따른다. 모멘텀 하이퍼파라미터는 일반적으로 0.9 근방의 값으로 설정, 두 식을 하나의 식으로 표현 이전의 가중치에 대한 연산이 추가된 모습과 학습 속도가 r(v_t-1) 만큼 가속하다는 것을 알 수 있다. v_t 는 이동 벡터로 아래와 같이 구한다. 이전의 모멘텀들이 누적되는 모습 def gradient_momentum(self, x, y): x_b = np.c_[x, np.ones((x.shape[0],1))] # 입력 데이터에 편향값을 위한 1의 추가 self.n_iterations = x.shape[0] for iterations in range(self.n_iterations): if iterations.. 이전 1 ··· 8 9 10 11 12 다음