"확률적 경사하강법"의 두 판 사이의 차이
(사용자 2명의 중간 판 3개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''확률적 경사하강법'''(Stochastic Gradient Descent, SGD)은 무작위로 배치 크기가 1인 단 한 개의 데이터를 추출하여 기울기를 계산하고, 경사 하강 알고리즘을 적용하는 방법을 말한다. 빠르게 최적점을 찾을 수 있지만 비교적 노이즈가 심하다는 단점이 있다. | + | '''확률적 경사하강법'''(Stochastic Gradient Descent, SGD)은 무작위로 배치 크기가 1인 단 한 개의 데이터를 추출하여 기울기를 계산하고, 경사 하강 알고리즘을 적용하는 방법을 말한다. 빠르게 최적점을 찾을 수 있지만 비교적 노이즈가 심하다는 단점이 있다. '''추계적 경사 하강 기법'''이라고도 한다. |
== 개요 == | == 개요 == | ||
5번째 줄: | 5번째 줄: | ||
확률적 경사하강법은 [[머신러닝]] [[알고리즘]]에 대한 최적의 매개변수 구성을 찾는 방법이다. 네트워크 오류를 줄이기 위해 반복적으로 머신러닝 네트워크 구성에 작은 조정을 한다. 오류 함수가 일반적인 포물선처럼 간단한 경우는 드물다. 대부분 기울기가 심한 언덕과 계곡이 많다. 이 그래프의 왼쪽에서 실제 경사하강법이 시작되면 이 지점에서 어느 방향으로 이동하든 위로 이동해야 하기 때문에 왼쪽 계곡에서 멈춘다. 이 지점을 로컬 최소치라고 한다. 그러나 그래프에는 더 낮은 점이 또 있다. 전체 그래프에서 가장 낮은 지점은 확률적 경사하강법이 찾으려고 하는 전역 최소값이다. 확률적 경사하강법은 각 훈련 지점 후에 네트워크의 구성을 조정하여 전역 최소값을 찾으려고 한다. 이 방법은 전체 데이터 세트에 대해 오류를 줄이거나 기울기를 찾는 대신 무작위로 선택한 배치에 대한 기울기를 근사하게 함으로써 오류를 줄인다. 실제로 무작위 선택은 데이터 세트를 무작위로 섞고 단계적으로 배치를 통해 작업함으로써 달성된다. 만약 네트워크가 훈련 예제를 잘못 받으면 이후에 정확하게 수행하기 위해 구성을 업데이트할 것이다. 그러나 구성 업데이트로 다른 질문을 잘못 받아 네트워크의 전체 오류를 증가시킬 수 있다. 따라서 모든 훈련 반복이 확률적 경사하강 알고리즘을 통해 네트워크를 개선할 수 있는 것은 아니다. 반면에 확률적 경사하강법은 모델을 로컬 최소값에서 전역 최소값으로 이동시키는 방식으로 네트워크 매개변수를 조정할 수 있다. 오목함수를 다시 살펴보면, 훈련 사례를 처리한 후 알고리즘은 우리가 있던 로컬 최소값에서 벗어나기 위해 그래프에서 오른쪽으로 이동하도록 선택할 수 있다. 그렇게 하면 네트워크의 오차가 커지지만, 언덕 위로 이동할 수 있다. 이렇게 하면 추가 훈련을 통해 경사하강법이 전역 최소값으로 이동하도록 할 수 있다. 확률적 경사하강법의 이점은 일반적으로 최소값으로 수렴하면서 실제 경사하강법보다 훨씬 적은 계산이 필요하다는 것이다.<ref>Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent </ref> | 확률적 경사하강법은 [[머신러닝]] [[알고리즘]]에 대한 최적의 매개변수 구성을 찾는 방법이다. 네트워크 오류를 줄이기 위해 반복적으로 머신러닝 네트워크 구성에 작은 조정을 한다. 오류 함수가 일반적인 포물선처럼 간단한 경우는 드물다. 대부분 기울기가 심한 언덕과 계곡이 많다. 이 그래프의 왼쪽에서 실제 경사하강법이 시작되면 이 지점에서 어느 방향으로 이동하든 위로 이동해야 하기 때문에 왼쪽 계곡에서 멈춘다. 이 지점을 로컬 최소치라고 한다. 그러나 그래프에는 더 낮은 점이 또 있다. 전체 그래프에서 가장 낮은 지점은 확률적 경사하강법이 찾으려고 하는 전역 최소값이다. 확률적 경사하강법은 각 훈련 지점 후에 네트워크의 구성을 조정하여 전역 최소값을 찾으려고 한다. 이 방법은 전체 데이터 세트에 대해 오류를 줄이거나 기울기를 찾는 대신 무작위로 선택한 배치에 대한 기울기를 근사하게 함으로써 오류를 줄인다. 실제로 무작위 선택은 데이터 세트를 무작위로 섞고 단계적으로 배치를 통해 작업함으로써 달성된다. 만약 네트워크가 훈련 예제를 잘못 받으면 이후에 정확하게 수행하기 위해 구성을 업데이트할 것이다. 그러나 구성 업데이트로 다른 질문을 잘못 받아 네트워크의 전체 오류를 증가시킬 수 있다. 따라서 모든 훈련 반복이 확률적 경사하강 알고리즘을 통해 네트워크를 개선할 수 있는 것은 아니다. 반면에 확률적 경사하강법은 모델을 로컬 최소값에서 전역 최소값으로 이동시키는 방식으로 네트워크 매개변수를 조정할 수 있다. 오목함수를 다시 살펴보면, 훈련 사례를 처리한 후 알고리즘은 우리가 있던 로컬 최소값에서 벗어나기 위해 그래프에서 오른쪽으로 이동하도록 선택할 수 있다. 그렇게 하면 네트워크의 오차가 커지지만, 언덕 위로 이동할 수 있다. 이렇게 하면 추가 훈련을 통해 경사하강법이 전역 최소값으로 이동하도록 할 수 있다. 확률적 경사하강법의 이점은 일반적으로 최소값으로 수렴하면서 실제 경사하강법보다 훨씬 적은 계산이 필요하다는 것이다.<ref>Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent </ref> | ||
+ | |||
+ | == 이론 == | ||
+ | === 배경 === | ||
+ | 통계적 추정과 머신러닝은 모두 합계의 형태를 갖는 객관적 함수를 최소화하는 문제를 고려한다. | ||
+ | : <math>Q(w) = \frac{1}{n}\sum_{i=1}^n Q_i(w),</math> | ||
+ | 여기에서 <math>Q(w)</math>를 최소화하는 모수 통계 <math>w</math>을 추정해야 한다. 각 종합 함수 <math>Q_i</math>은 일반적으로 데이터 집합의 <math>i</math>번째 관측치와 연관된다. | ||
+ | 전형적인 통계량에서 합계 최소화 문제는 최소 제곱과 최대 우도 추정에서 발생한다. 합계의 최소제로서 발생하는 추정기의 일반적인 클래스를 M-추정기(estimators)라고 한다. 그러나 통계에서 로컬 최소값를 요구하는 것조차 최대 우도 추정의 일부 문제에 대해 지나치게 제한적이라는 것은 오래 전부터 인정되어 왔다. 따라서 현대의 통계 이론가들은 종종 우도함수의 고정점 또는 파생상품의 0, 점수 함수 및 기타 추정 방정식을 고려한다. 또한 총액 최소화 문제는 경험적 위험 최소화를 위해 발생한다. 이 경우 <math>Q_i(w)</math>은 <math>i</math>번째 예에서 손실함수의 값이고, <math>Q(w)</math>은 경험적 위험이다. 위의 기능을 최소화하기 위해 사용할 경우 표준 또는 배치 경사하강법은 다음과 같은 반복을 수행한다. | ||
+ | : <math>w := w - \eta \nabla Q(w) = w - \frac{\eta}{n} \sum_{i=1}^n \nabla Q_i(w),</math> | ||
+ | 위 식에서 <math>\eta</math>은 한 단계 크기이다. | ||
+ | |||
+ | 그러나 다른 경우에 총점수를 평가하려면 모든 종합 함수의 경사율에 대한 값비싼 평가가 필요할 수 있다. 훈련 세트가 거대하고 단순한 공식은 존재하지 않을 때, 경사를 평가하려면 모든 전체 함수의 경사를 평가해야 하기 때문에 경사 합계를 평가하는 것은 매우 비싸진다. 반복할 때마다 계산 비용을 절약하기 위해 확률적 경사하강 전체 함수의 하위 집합을 샘플링한다. 이는 대규모 머신러닝 문제의 경우 매우 효과적이다.<ref name="위키피디아">Stochastic gradient descent Wikipedia - https://en.wikipedia.org/wiki/Stochastic_gradient_descent</ref> | ||
+ | |||
+ | === 반복법 === | ||
+ | 확률적 경사 강하에서 <math>Q(w)</math>의 실제 경사도는 단일 예에서 경사도에 의해 근사치된다. | ||
+ | : <math>w := w - \eta \nabla Q_i(w).</math> | ||
+ | 알고리즘이 훈련 세트를 휩쓸면서 각 훈련 예에 대해 위의 업데이트를 수행한다. 알고리즘이 수렴될 때까지 훈련 세트에 걸쳐 여러 차례 패스를 할 수 있다. 이렇게 하면 각 패스에 대해 데이터를 섞어서 사이클을 방지할 수 있다. 일반적인 구현에서는 알고리즘이 수렴되도록 적응 학습 속도를 사용할 수 있다. 유사점에서는 확률적 구배 강하를 다음과 같이 나타낼 수 있다. | ||
+ | * 매개변수 <math>w</math>와 학습률 <math>\eta</math>의 초기 벡터를 선택한다. | ||
+ | * 최소값을 구할 때까지 반복하십시오. | ||
+ | ** 교육 세트의 예제를 무작위로 섞으십시오. | ||
+ | ** <math> i=1, 2, ..., n</math>의 경우 다음을 수행한다. | ||
+ | *** <math>\! w := w - \eta \nabla Q_i(w).</math> | ||
+ | 단일 예에서 실제 경사와 경사 계산 사이의 절충안은 각 단계에서 둘 이상의 훈련 예시에 대한 경사 계산이다. 이를 미니 배치라고도 한다. 코드는 각 단계를 별도로 계산하기 보다는 벡터화 라이브러리를 사용할 수 있기 때문에, 이것은 설명된 '진정한' 확률적 경사 강하보다 훨씬 더 좋은 성능을 발휘할 수 있다. 또한 각 단계에서 계산된 경사는 더 많은 훈련 예에 걸쳐 평균이 산출되기 때문에 더 부드러운 수렴을 초래할 수 있다. 확률적 경사 하강의 수렴은 볼록 최소화와 확률적 근사 이론을 사용하여 분석되었다. 간단히 말해서, 학습률 <math>\eta</math>가 적절한 비율로 감소하고, 비교적 가벼운 가정 하에 있을 때, 확률적 경사 하강은 거의 확실히 볼록하거나 유사 콘벡스일 때 전역 최소로 수렴되고, 그렇지 않으면 거의 확실히 로컬 최소로 수렴된다.<ref name="위키피디아"></ref> | ||
+ | |||
+ | == 변형 == | ||
+ | 기본적인 확률적 경사하강법 알고리즘에 대한 많은 개선사항이 제안되어 사용되어 왔다. 특히 머신러닝에서는 학습율(스텝 사이즈) 설정의 필요성이 문제점으로 인식되고 있다. 이 파라미터를 너무 높게 설정하면 알고리즘이 분산될 수 있다. 반면 알고리즘을 너무 낮게 설정하면 수렴 속도가 느려진다. 개념적으로 단순한 확률적 경사 하강 연장은 학습 속도를 반복 횟수 <math>t</math>의 감소 함수 <math>\eta t</math>로 만들어 학습 속도 스케줄을 부여하여 첫 번째 반복은 매개변수에 큰 변화를 일으키지만, 이후 반복은 미세 조정만 한다. 이런 일정은 맥퀸(MacQueen)이 k-means 클러스터링 작업을 하면서부터 알려졌다. 확률적 경사하강법의 여러 변종에서 단계 크기를 선택하기 위한 실제 지침은 스팰(Spall)에 의해 제공된다. | ||
+ | ===암시적 업데이트=== | ||
+ | 앞서 언급한 바와 같이 고전적인 확률적 경사 하강은 일반적으로 학습률 <math>\eta</math>에 민감하다. 빠른 융합은 높은 학습률을 필요로 하지만 이것은 수치적 불안정을 유발할 수 있다. 이러한 문제는 현재가 아닌 다음 반복에서 확률적 경사를 평가함으로써 암시적 업데이트(ISGD)를 고려함으로써 크게 해결될 수 있다 | ||
+ | :<math>w^{new} := w^{old} - \eta \nabla Q_i(w^{new}).</math> | ||
+ | 이 방정식은 <math>w^{new}</math>가 방정식의 양쪽에 나타나기 때문에 암묵적이다. 업데이트 이후 최소 경사 방법의 확률적 형식이다. 다음과 같이 쓸 수도 있다. | ||
+ | :<math>w^{new} := \arg\min_w \{ Q_i(w) + \frac{1}{2\eta} ||w - w^{old}||^2 \}.</math> | ||
+ | 예를 들어 형상 <math>x_1, \ldots, x_n \in\mathbb{R}^p</math>와 관측치 <math>y_1, \ldots, y_n\in\mathbb{R}</math>가 있는 최소 제곱을 고려한다. 고전적인 확률적 경사하강법 진행은 다음과 같다. | ||
+ | :<math>w^{new} = w^{old} + \eta (y_i - x_i'w^{old}) x_i</math> | ||
+ | 여기서 <math>i</math>는 1과 <math>n</math> 사이에 균일하게 샘플링된다. 이 절차의 이론적 정합성은 비교적 가벼운 가정 하에서 발생하지만, 실제로는 절차가 상당히 불안정할 수 있다. 특히 <math>I - \eta x_i x_i'</math>가 높은 확률로 큰 절대 고유값을 갖도록 <math>\eta</math>를 잘못 지정했을 때 이 절차는 몇 번의 반복 내에서 숫자로 갈릴 수 있다. 이와는 대조적으로 '불확실한 확률적 경사 강하'(ISGD)는 다음과 같이 폐쇄형 형태로 해결할 수 있다. | ||
+ | :<math>w^{new} = w^{old} + \frac{\eta}{1 + \eta ||x_i||^2} (y_i - x_i'w^{old}) x_i.</math> | ||
+ | 이 과정은 현재 학습률이 정상화되었기 때문에 사실상 모든 <math>\eta</math>에게 수적으로 안정적일 것이다. 최소 제곱 문제에서 고전적 및 암묵적 확률적 그라데이션 강하 간의 비교는 최소 평균 제곱 필터와 최소 평균 제곱 필터 정규화 최소 제곱 필터(NLMS)의 비교와 매우 유사하다. ISGD용 폐쇄형 솔루션은 최소 사각형에서만 가능하지만, 다양한 모델에서 절차가 효율적으로 구현될 수 있다. 구체적으로는 <math>Q_i(w)</math>가 형상 <math>x_i</math>와 선형 결합을 통해서만 <math>w</math>에 의존한다고 가정해, 우리가 <math>\nabla_w Q_i(w) = -q(x_i'w) x_i</math>를 쓸 수 있도록 한다. <math>q() \in\mathbb{R}</math>도 <math>x_i, y_i</math>에 의존할 수 있지만 <math>x_i'w</math>을 제외하고 <math>w</math>에 의존하지 않는다. 최소 제곱은 이 규칙을 준수하며, 논리 회귀와 대부분의 일반화된 선형 모형도 준수한다. 예를 들어 최소 제곱, <math>q(x_i'w) = y_i - x_i'w</math> 및 로지스틱 회귀 분석 <math>q(x_i'w) = y_i - S(x_i'w)</math>에서 <math>S(u) = e^u/(1+e^u)</math>는 로지스틱 함수이다. 포아송 회귀, <math>q(x_i'w) = y_i - e^{x_i'w}</math> 등에서는 다음과 같이 한다. | ||
+ | |||
+ | 간단하게 다음과 같이 구현된다. <math>f(\xi) = \eta q(x_i'w^{old} + \xi ||x_i||^2)</math>를, <math>\xi</math>가 스칼라인 곳에 둔다. 그렇다면 ISGD는 다음과 같다. | ||
+ | :<math>w^{new} = w^{old} + \xi^\ast x_i,~\text{where}~\xi^\ast = f(\xi^\ast).</math> | ||
+ | 스케일링 계수 <math>\xi^\ast\in\mathbb{R}</math>는 이분법을 통해 확인할 수 있다. 앞서 언급한 일반화된 선형 모형과 같은 대부분의 일반 모델에서 함수 <math>q()</math>는 감소하고 있다. 따라서 <math>\xi^\ast</math>에 대한 검색 범위는 <math>[\min(0, f(0)), \max(0, f(0))]</math>이다. | ||
+ | |||
+ | ===모멘텀=== | ||
+ | 추가 제안에는 루멜하트, 힌튼, 윌리엄스의 역전파 학습 논문에서 나타난 모멘텀(momentum) 방식이 포함된다. 모멘텀과 함께 확률적 경사 하강은 각 반복 시 업데이트 <math>\Delta w </math>를 기억하며, 다음 업데이트를 경사와 이전 업데이트의 선형 조합으로 결정한다. 탄력이 있는 확률적 경사하강법에서는 각 반복 시 업데이트 <math>w </math>을(를) 기억하고, 다음 업데이트를 경사 및 이전 업데이트의 선형 조합으로 결정한다. | ||
+ | :<math>\Delta w := \alpha \Delta w - \eta \nabla Q_i(w)</math> | ||
+ | :<math>w := w + \Delta w </math> | ||
+ | 이를 통해 다음을 실현할 수 있다. | ||
+ | :<math>w := w - \eta \nabla Q_i(w) + \alpha \Delta w </math> | ||
+ | 여기서 <math>Q(w)</math>를 최소화하는 매개변수 <math>w</math>을 추정해야 할 경우, <math>\eta</math>은 단계 크기이며, <math>\alpha</math>는 체중 변화에 대한 현재 구배와 초기 구배들의 상대적 기여도를 결정하는 0과 1 사이의 지수 붕괴 계수다. | ||
+ | 모멘텀이라는 이름은 물리학의 가속도에서 유래되었다고 유추된다. 즉, 매개 변수 공간을 이동하는 입자로 생각되는 무게 벡터 <math>w</math>은 손실의 경사(힘)에서 가속을 일으킨다. 고전적인 확률적 경사 강하와는 달리 같은 방향으로 계속 이동하면서 진동을 방지하는 경향이 있다. 모멘텀은 수십년 동안 [[인공신경망]] 훈련에 성공적으로 사용되어 왔다. | ||
+ | |||
+ | ===평균화=== | ||
+ | 1980년대 후반에 루퍼트(Ruppert)와 폴리아크(Polyak)가 독자적으로 발명한 평균 확률적 경사이다. 하강은 시간이 지남에 따라 매개변수 벡터의 평균을 기록하는 보통의 확률적 경사로 하강이다. 즉, 업데이트는 일반적인 확률적 경사 강하와 동일하지만 알고리즘도 아래의 식을 추적한다. | ||
+ | :<math>\bar{w} = \frac{1}{t} \sum_{i=0}^{t-1} w_i</math> | ||
+ | 최적화가 완료되면 이 평균 매개변수 벡터가 <math>w</math>을 대신한다. | ||
+ | |||
+ | ===아다그라드=== | ||
+ | 아다그라드(AdaGrad)는 매개변수별 학습률을 가진 수정된 확률성 경사하강법 알고리즘으로, 2011년에 처음 출판되었다. 아다그라드는 변수의 업데이트 횟수에 따라 학습률를 조절하는 옵션이 추가된 최적화 방법이다. 여기서 변수란 가중치(W) 벡터의 하나의 값(w[i])을 말한다. 아다그라드는 많이 변화하지 않은 변수들은 학습률을 크게 하고, 반대로 많이 변화한 변수들에 대해서는 학습률을 적게 한다. 이는 많이 변화한 변수는 최적값에 근접했을 것이라는 가정하에 작은 크기로 이동하면서 세밀한 값을 조정하고, 반대로 적게 변화한 변수들은 학습률을 크게 하여 빠르게 손실 값을 줄인다. 아다그라드는 같은 입력 데이터가 여러 번 학습되는 학습 모델에 유용하게 쓰이는데, 대표적으로 언어와 관련된 워드이벡(word2vec)이나 글로브(GloVe)에 유용하다. 이는 학습 단어의 등장 확률에 따라 변수의 사용 비율이 확연하게 차이나기 때문에 많이 등장한 단어는 가중치를 적게 수정하고 적게 등장한 단어는 많이 수정할 수 있기 때문이다. 수식은 다음과 같다.<ref name="흰고래">흰고래의꿈, 〈[https://twinw.tistory.com/247 수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta)]〉, 《티스토리》, 2018-05-29 </ref> | ||
+ | |||
+ | <math>G = \sum_{\tau=1}^t g_\tau g_\tau^\mathsf{T}</math> | ||
+ | <math>G_{j,j} = \sum_{\tau=1}^t g_{\tau,j}^2</math>. | ||
+ | <math>w := w - \eta\, \mathrm{diag}(G)^{-\frac{1}{2}} \circ g</math> | ||
+ | <math>w_j := w_j - \frac{\eta}{\sqrt{G_{j,j}}} g_j.</math> | ||
+ | |||
+ | ===알엠에스프롭=== | ||
+ | 알엠에스프롭(RMSprop)은 아다그라드의 <math>G(t)</math>의 값이 무한히 커지는 것을 방지하고자 제안된 방법이다. 논문과 같은 형태로 발표된 다른 방법들과 달리 제프리 힌튼(Jeffrey Hinton) 교수와 제자들이 코세라(Coursera) 수업에서 소개했다. 알엠에스프롭은 지수 이동 평균을 이용한 방법이다. 지수 이동 평균이란 쉽게 말해 최근 값을 더 잘 반영하기 위해 최근 값에 값과 이전 값에 각각 가중치를 주어 계산하는 방법이다. | ||
+ | <math>x_{k} = ap_{k} + (1-a)x_{k-1} where a = \frac{2}{N+1}</math> | ||
+ | 위 식에서 지수 이동 평균값은 <math>x</math>, 현재 값은 <math>p</math>, 가중치는 <math>\alpha</math>이며, 아래 첨자 <math>k</math>는 학습률 또는 시간, 마지막으로 <math>N</math>은 값의 개수이다. 만약 처음부터 현재까지 계산을 하게 된다고 한다면 <math>N</math>과 k의 값은 같으며 가중치 <math>\alpha</math>는 <math>N</math>이 작을수록 커진다.<ref name="흰고래"></ref> | ||
+ | |||
+ | ===아담=== | ||
+ | 아담(Adaptive Moment Assessment, Adam)은 알엠에스프롭 최적기의 업데이트다. 이 최적화 알고리즘에서는 경사와 두 번째 경사 모멘트의 실행 평균이 모두 사용된다. 매개변수 <math> w^ {(t)} </math>과 손실 함수 <math> L ^ {(t)} </math>가 주어지며, 여기서 <math> t </math>은 현재의 훈련 반복(<math> 0 </math>에서 색인화됨)을 인덱스한다. 아담의 매개변수 업데이트는 다음과 같이 주어진다. | ||
+ | <math>m_w ^ {(t+1)} \leftarrow \beta_1 m_w ^ {(t)} + (1 - \beta_1) \nabla _w L ^ {(t)} </math> | ||
+ | <math>v_w ^ {(t+1)} \leftarrow \beta_2 v_w ^ {(t)} + (1 - \beta_2) (\nabla _w L ^ {(t)} )^2 </math> | ||
+ | |||
+ | <math>\hat{m}_w = \frac{m_w ^ {(t+1)}}{1 - \beta_1^{t + 1} } </math> | ||
+ | <math>\hat{v}_w = \frac{ v_w ^ {(t+1)}}{1 - \beta_2^{t + 1} } </math> | ||
+ | |||
+ | <math>w ^ {(t+1)} \leftarrow w ^ {(t)} - \eta \frac{\hat{m}_w}{\sqrt{\hat{v}_w} + \epsilon} </math> | ||
+ | |||
+ | 여기서 <math>\epsilon</math>은 0으로 나누어지는 것을 방지하기 위해 사용되는 작은 스칼라(예: <math>10^{-8}</math>)이고, <math>\beta_1</math>(예: 0.99)과 <math>\beta_2</math>(예: 0.999)는 각각 경사와 두 번째 경사에서 잊혀지는 요인이다. 스쿼링과 사각 로팅은 원소적으로 이루어진다. | ||
+ | |||
+ | ===아다델타=== | ||
+ | 아다델타(Adaptive Delta, AdaDelta)는 아다그라드, 알엠에스프롭, 모멘텀 모두를 합친 경사하강법이다. 크게 두 개의 특징이 있다. 첫 번째는 아다그라드의 특징인 모든 스텝의 경사 제곱의 합을 윈도우 사이즈를 두어 윈도우 사이즈만큼의 합으로 변경한다. 이후 알엠에스프롭과 똑같이지수이동평균을 적용한다. 두 번째는 헤시안 근사법(Hessian Approximation)을 이용한 단위(Units) 수정이다. | ||
+ | :<math> \mbox{units of } \Delta x \propto \mbox{units of } g \propto \frac{af}{ax} \propto \frac{1}{ \mbox{units of }x} (11) </math> | ||
+ | 논문에서는 가중치와 가중치 변화량의 단위가 같아야 한다고 명시되어 있다. 그리고 확률적 경사하강법, 모멘텀, 아다그라드업데이트가 기울기 양의 비율을 포함하므로 정확한 단위를 가지지 않아서 업데이트는 단위가 없다고 설명한다. 그리고 위 수식을 보면 알 수 있듯이 <math>\Delta x</math>의 단위는 <math>x</math>의 단위가 아닌 <math>x</math>의 단위의 역수와 관계가 있다는 것을 알 수 있다. 반대로 아다델타의 경우 뉴턴의 방법을 이용하여 아래 수식과 같이 <math>\Delta x</math>와 <math>x</math>의 단위간의 관계를 만든다.<ref name="흰고래"></ref> | ||
+ | <center> | ||
+ | {|border=0 | ||
+ | |align=center|[[Image: 아다델타 수식.png]]<br> | ||
+ | |}</center> | ||
+ | |||
+ | === 네스테로프 가속 경사 === | ||
+ | 기본적인 모멘텀 방식은 이동을 중지해야 하는 지점에 도달해도 모멘텀에 의해 해당 지점을 지나칠 수 있다는 문제가 있다. 네스테로프 가속 경사(Nesterov accelerated gradient, NAG)는 이러한 문제점을 해결하기 위해 제안되었다. 네스테로프 가속 경사에서는 모멘텀 계산 시에 모멘텀에 의해 발생하는 변화를 미리 보고 모멘텀을 결정한다. 이를 식으로 나타내면 다음과 같다. | ||
+ | |||
+ | <math> v_ {ij}^{(t)} = \beta v_ {ij}^{(t-1)} + \eta \frac{al}{a \widehat{w}_ {ij}^{(t)}} </math> | ||
+ | |||
+ | 이 때 <math>\widehat{w}_ {ij}^{(t)}</math>는 다음과 같이 계산된다. | ||
+ | |||
+ | <math>\widehat{w}_ {ij}^{(t)} = w_ {ij}^{(t)} - \beta v_ {ij}^{(t-1)}</math> | ||
+ | 그 다음, 기본적인 모멘텀 방식과 같이 가중치를 다음과 같이 업데이트한다. | ||
+ | <math> \widehat{w}_ {ij}^{(t+1)} = \widehat{w}_ {ij}^{(t)} - v_ {ij}^{(t)}</math> | ||
+ | |||
+ | 기본적인 모멘텀 방식은 이전의 시간의 모멘텀과 독립적으로 기울기를 계산하여 모멘텀과 기울기를 더함으로써 업데이트의 방향을 결정한다. 반면에 네스테로프 가속 경사에서는 먼저 모멘텀만큼 업데이트를 했다고 가정한 뒤에 기울기를 계산하고, 이를 기반으로 업데이트의 방향을 결정한다. 기본적인 모멘텀 방식은 현재의 가속도를 고려하지 않고 속도를 설정한다면, 네스테로프 가속 경사는 현재의 가속도를 어느 정도 고려하여 속도를 설정한다고 생각할 수 있다. 이러한 업데이트 방식을 통해 네스테로프 가속 경사는 모멘텀을 이용한 빠른 이동이라는 장점을 유지하면서도 모멘텀에 의해 과하게 이동하는 단점을 완화했다.<ref>Bool, 〈[https://untitledtblog.tistory.com/149 (머신 러닝/딥 러닝) 인공 신경망을 위한 확률적 경사 하강법]〉, 《티스토리》, 2018-12-24 </ref> | ||
{{각주}} | {{각주}} | ||
10번째 줄: | 110번째 줄: | ||
== 참고자료 == | == 참고자료 == | ||
* Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent | * Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent | ||
+ | * Stochastic gradient descent Wikipedia - https://en.wikipedia.org/wiki/Stochastic_gradient_descent | ||
+ | * 흰고래의꿈, 〈[https://twinw.tistory.com/247 수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta)]〉, 《티스토리》, 2018-05-29 | ||
+ | *Bool, 〈[https://untitledtblog.tistory.com/149 (머신 러닝/딥 러닝) 인공 신경망을 위한 확률적 경사 하강법]〉, 《티스토리》, 2018-12-24 | ||
== 같이 보기 == | == 같이 보기 == | ||
− | * | + | * [[머신러닝]] |
{{인공지능 기술|검토 필요}} | {{인공지능 기술|검토 필요}} |
2020년 8월 19일 (수) 10:25 기준 최신판
확률적 경사하강법(Stochastic Gradient Descent, SGD)은 무작위로 배치 크기가 1인 단 한 개의 데이터를 추출하여 기울기를 계산하고, 경사 하강 알고리즘을 적용하는 방법을 말한다. 빠르게 최적점을 찾을 수 있지만 비교적 노이즈가 심하다는 단점이 있다. 추계적 경사 하강 기법이라고도 한다.
목차
개요[편집]
확률적 경사하강법은 머신러닝 알고리즘에 대한 최적의 매개변수 구성을 찾는 방법이다. 네트워크 오류를 줄이기 위해 반복적으로 머신러닝 네트워크 구성에 작은 조정을 한다. 오류 함수가 일반적인 포물선처럼 간단한 경우는 드물다. 대부분 기울기가 심한 언덕과 계곡이 많다. 이 그래프의 왼쪽에서 실제 경사하강법이 시작되면 이 지점에서 어느 방향으로 이동하든 위로 이동해야 하기 때문에 왼쪽 계곡에서 멈춘다. 이 지점을 로컬 최소치라고 한다. 그러나 그래프에는 더 낮은 점이 또 있다. 전체 그래프에서 가장 낮은 지점은 확률적 경사하강법이 찾으려고 하는 전역 최소값이다. 확률적 경사하강법은 각 훈련 지점 후에 네트워크의 구성을 조정하여 전역 최소값을 찾으려고 한다. 이 방법은 전체 데이터 세트에 대해 오류를 줄이거나 기울기를 찾는 대신 무작위로 선택한 배치에 대한 기울기를 근사하게 함으로써 오류를 줄인다. 실제로 무작위 선택은 데이터 세트를 무작위로 섞고 단계적으로 배치를 통해 작업함으로써 달성된다. 만약 네트워크가 훈련 예제를 잘못 받으면 이후에 정확하게 수행하기 위해 구성을 업데이트할 것이다. 그러나 구성 업데이트로 다른 질문을 잘못 받아 네트워크의 전체 오류를 증가시킬 수 있다. 따라서 모든 훈련 반복이 확률적 경사하강 알고리즘을 통해 네트워크를 개선할 수 있는 것은 아니다. 반면에 확률적 경사하강법은 모델을 로컬 최소값에서 전역 최소값으로 이동시키는 방식으로 네트워크 매개변수를 조정할 수 있다. 오목함수를 다시 살펴보면, 훈련 사례를 처리한 후 알고리즘은 우리가 있던 로컬 최소값에서 벗어나기 위해 그래프에서 오른쪽으로 이동하도록 선택할 수 있다. 그렇게 하면 네트워크의 오차가 커지지만, 언덕 위로 이동할 수 있다. 이렇게 하면 추가 훈련을 통해 경사하강법이 전역 최소값으로 이동하도록 할 수 있다. 확률적 경사하강법의 이점은 일반적으로 최소값으로 수렴하면서 실제 경사하강법보다 훨씬 적은 계산이 필요하다는 것이다.[1]
이론[편집]
배경[편집]
통계적 추정과 머신러닝은 모두 합계의 형태를 갖는 객관적 함수를 최소화하는 문제를 고려한다.
여기에서 를 최소화하는 모수 통계 을 추정해야 한다. 각 종합 함수 은 일반적으로 데이터 집합의 번째 관측치와 연관된다. 전형적인 통계량에서 합계 최소화 문제는 최소 제곱과 최대 우도 추정에서 발생한다. 합계의 최소제로서 발생하는 추정기의 일반적인 클래스를 M-추정기(estimators)라고 한다. 그러나 통계에서 로컬 최소값를 요구하는 것조차 최대 우도 추정의 일부 문제에 대해 지나치게 제한적이라는 것은 오래 전부터 인정되어 왔다. 따라서 현대의 통계 이론가들은 종종 우도함수의 고정점 또는 파생상품의 0, 점수 함수 및 기타 추정 방정식을 고려한다. 또한 총액 최소화 문제는 경험적 위험 최소화를 위해 발생한다. 이 경우 은 번째 예에서 손실함수의 값이고, 은 경험적 위험이다. 위의 기능을 최소화하기 위해 사용할 경우 표준 또는 배치 경사하강법은 다음과 같은 반복을 수행한다.
위 식에서 은 한 단계 크기이다.
그러나 다른 경우에 총점수를 평가하려면 모든 종합 함수의 경사율에 대한 값비싼 평가가 필요할 수 있다. 훈련 세트가 거대하고 단순한 공식은 존재하지 않을 때, 경사를 평가하려면 모든 전체 함수의 경사를 평가해야 하기 때문에 경사 합계를 평가하는 것은 매우 비싸진다. 반복할 때마다 계산 비용을 절약하기 위해 확률적 경사하강 전체 함수의 하위 집합을 샘플링한다. 이는 대규모 머신러닝 문제의 경우 매우 효과적이다.[2]
반복법[편집]
확률적 경사 강하에서 의 실제 경사도는 단일 예에서 경사도에 의해 근사치된다.
알고리즘이 훈련 세트를 휩쓸면서 각 훈련 예에 대해 위의 업데이트를 수행한다. 알고리즘이 수렴될 때까지 훈련 세트에 걸쳐 여러 차례 패스를 할 수 있다. 이렇게 하면 각 패스에 대해 데이터를 섞어서 사이클을 방지할 수 있다. 일반적인 구현에서는 알고리즘이 수렴되도록 적응 학습 속도를 사용할 수 있다. 유사점에서는 확률적 구배 강하를 다음과 같이 나타낼 수 있다.
- 매개변수 와 학습률 의 초기 벡터를 선택한다.
- 최소값을 구할 때까지 반복하십시오.
- 교육 세트의 예제를 무작위로 섞으십시오.
- 의 경우 다음을 수행한다.
단일 예에서 실제 경사와 경사 계산 사이의 절충안은 각 단계에서 둘 이상의 훈련 예시에 대한 경사 계산이다. 이를 미니 배치라고도 한다. 코드는 각 단계를 별도로 계산하기 보다는 벡터화 라이브러리를 사용할 수 있기 때문에, 이것은 설명된 '진정한' 확률적 경사 강하보다 훨씬 더 좋은 성능을 발휘할 수 있다. 또한 각 단계에서 계산된 경사는 더 많은 훈련 예에 걸쳐 평균이 산출되기 때문에 더 부드러운 수렴을 초래할 수 있다. 확률적 경사 하강의 수렴은 볼록 최소화와 확률적 근사 이론을 사용하여 분석되었다. 간단히 말해서, 학습률 가 적절한 비율로 감소하고, 비교적 가벼운 가정 하에 있을 때, 확률적 경사 하강은 거의 확실히 볼록하거나 유사 콘벡스일 때 전역 최소로 수렴되고, 그렇지 않으면 거의 확실히 로컬 최소로 수렴된다.[2]
변형[편집]
기본적인 확률적 경사하강법 알고리즘에 대한 많은 개선사항이 제안되어 사용되어 왔다. 특히 머신러닝에서는 학습율(스텝 사이즈) 설정의 필요성이 문제점으로 인식되고 있다. 이 파라미터를 너무 높게 설정하면 알고리즘이 분산될 수 있다. 반면 알고리즘을 너무 낮게 설정하면 수렴 속도가 느려진다. 개념적으로 단순한 확률적 경사 하강 연장은 학습 속도를 반복 횟수 의 감소 함수 로 만들어 학습 속도 스케줄을 부여하여 첫 번째 반복은 매개변수에 큰 변화를 일으키지만, 이후 반복은 미세 조정만 한다. 이런 일정은 맥퀸(MacQueen)이 k-means 클러스터링 작업을 하면서부터 알려졌다. 확률적 경사하강법의 여러 변종에서 단계 크기를 선택하기 위한 실제 지침은 스팰(Spall)에 의해 제공된다.
암시적 업데이트[편집]
앞서 언급한 바와 같이 고전적인 확률적 경사 하강은 일반적으로 학습률 에 민감하다. 빠른 융합은 높은 학습률을 필요로 하지만 이것은 수치적 불안정을 유발할 수 있다. 이러한 문제는 현재가 아닌 다음 반복에서 확률적 경사를 평가함으로써 암시적 업데이트(ISGD)를 고려함으로써 크게 해결될 수 있다
이 방정식은 가 방정식의 양쪽에 나타나기 때문에 암묵적이다. 업데이트 이후 최소 경사 방법의 확률적 형식이다. 다음과 같이 쓸 수도 있다.
예를 들어 형상 와 관측치 가 있는 최소 제곱을 고려한다. 고전적인 확률적 경사하강법 진행은 다음과 같다.
여기서 는 1과 사이에 균일하게 샘플링된다. 이 절차의 이론적 정합성은 비교적 가벼운 가정 하에서 발생하지만, 실제로는 절차가 상당히 불안정할 수 있다. 특히 가 높은 확률로 큰 절대 고유값을 갖도록 를 잘못 지정했을 때 이 절차는 몇 번의 반복 내에서 숫자로 갈릴 수 있다. 이와는 대조적으로 '불확실한 확률적 경사 강하'(ISGD)는 다음과 같이 폐쇄형 형태로 해결할 수 있다.
이 과정은 현재 학습률이 정상화되었기 때문에 사실상 모든 에게 수적으로 안정적일 것이다. 최소 제곱 문제에서 고전적 및 암묵적 확률적 그라데이션 강하 간의 비교는 최소 평균 제곱 필터와 최소 평균 제곱 필터 정규화 최소 제곱 필터(NLMS)의 비교와 매우 유사하다. ISGD용 폐쇄형 솔루션은 최소 사각형에서만 가능하지만, 다양한 모델에서 절차가 효율적으로 구현될 수 있다. 구체적으로는 가 형상 와 선형 결합을 통해서만 에 의존한다고 가정해, 우리가 를 쓸 수 있도록 한다. 도 에 의존할 수 있지만 을 제외하고 에 의존하지 않는다. 최소 제곱은 이 규칙을 준수하며, 논리 회귀와 대부분의 일반화된 선형 모형도 준수한다. 예를 들어 최소 제곱, 및 로지스틱 회귀 분석 에서 는 로지스틱 함수이다. 포아송 회귀, 등에서는 다음과 같이 한다.
간단하게 다음과 같이 구현된다. 를, 가 스칼라인 곳에 둔다. 그렇다면 ISGD는 다음과 같다.
스케일링 계수 는 이분법을 통해 확인할 수 있다. 앞서 언급한 일반화된 선형 모형과 같은 대부분의 일반 모델에서 함수 는 감소하고 있다. 따라서 에 대한 검색 범위는 이다.
모멘텀[편집]
추가 제안에는 루멜하트, 힌튼, 윌리엄스의 역전파 학습 논문에서 나타난 모멘텀(momentum) 방식이 포함된다. 모멘텀과 함께 확률적 경사 하강은 각 반복 시 업데이트 를 기억하며, 다음 업데이트를 경사와 이전 업데이트의 선형 조합으로 결정한다. 탄력이 있는 확률적 경사하강법에서는 각 반복 시 업데이트 을(를) 기억하고, 다음 업데이트를 경사 및 이전 업데이트의 선형 조합으로 결정한다.
이를 통해 다음을 실현할 수 있다.
여기서 를 최소화하는 매개변수 을 추정해야 할 경우, 은 단계 크기이며, 는 체중 변화에 대한 현재 구배와 초기 구배들의 상대적 기여도를 결정하는 0과 1 사이의 지수 붕괴 계수다. 모멘텀이라는 이름은 물리학의 가속도에서 유래되었다고 유추된다. 즉, 매개 변수 공간을 이동하는 입자로 생각되는 무게 벡터 은 손실의 경사(힘)에서 가속을 일으킨다. 고전적인 확률적 경사 강하와는 달리 같은 방향으로 계속 이동하면서 진동을 방지하는 경향이 있다. 모멘텀은 수십년 동안 인공신경망 훈련에 성공적으로 사용되어 왔다.
평균화[편집]
1980년대 후반에 루퍼트(Ruppert)와 폴리아크(Polyak)가 독자적으로 발명한 평균 확률적 경사이다. 하강은 시간이 지남에 따라 매개변수 벡터의 평균을 기록하는 보통의 확률적 경사로 하강이다. 즉, 업데이트는 일반적인 확률적 경사 강하와 동일하지만 알고리즘도 아래의 식을 추적한다.
최적화가 완료되면 이 평균 매개변수 벡터가 을 대신한다.
아다그라드[편집]
아다그라드(AdaGrad)는 매개변수별 학습률을 가진 수정된 확률성 경사하강법 알고리즘으로, 2011년에 처음 출판되었다. 아다그라드는 변수의 업데이트 횟수에 따라 학습률를 조절하는 옵션이 추가된 최적화 방법이다. 여기서 변수란 가중치(W) 벡터의 하나의 값(w[i])을 말한다. 아다그라드는 많이 변화하지 않은 변수들은 학습률을 크게 하고, 반대로 많이 변화한 변수들에 대해서는 학습률을 적게 한다. 이는 많이 변화한 변수는 최적값에 근접했을 것이라는 가정하에 작은 크기로 이동하면서 세밀한 값을 조정하고, 반대로 적게 변화한 변수들은 학습률을 크게 하여 빠르게 손실 값을 줄인다. 아다그라드는 같은 입력 데이터가 여러 번 학습되는 학습 모델에 유용하게 쓰이는데, 대표적으로 언어와 관련된 워드이벡(word2vec)이나 글로브(GloVe)에 유용하다. 이는 학습 단어의 등장 확률에 따라 변수의 사용 비율이 확연하게 차이나기 때문에 많이 등장한 단어는 가중치를 적게 수정하고 적게 등장한 단어는 많이 수정할 수 있기 때문이다. 수식은 다음과 같다.[3]
.
알엠에스프롭[편집]
알엠에스프롭(RMSprop)은 아다그라드의 의 값이 무한히 커지는 것을 방지하고자 제안된 방법이다. 논문과 같은 형태로 발표된 다른 방법들과 달리 제프리 힌튼(Jeffrey Hinton) 교수와 제자들이 코세라(Coursera) 수업에서 소개했다. 알엠에스프롭은 지수 이동 평균을 이용한 방법이다. 지수 이동 평균이란 쉽게 말해 최근 값을 더 잘 반영하기 위해 최근 값에 값과 이전 값에 각각 가중치를 주어 계산하는 방법이다.
위 식에서 지수 이동 평균값은 , 현재 값은 , 가중치는 이며, 아래 첨자 는 학습률 또는 시간, 마지막으로 은 값의 개수이다. 만약 처음부터 현재까지 계산을 하게 된다고 한다면 과 k의 값은 같으며 가중치 는 이 작을수록 커진다.[3]
아담[편집]
아담(Adaptive Moment Assessment, Adam)은 알엠에스프롭 최적기의 업데이트다. 이 최적화 알고리즘에서는 경사와 두 번째 경사 모멘트의 실행 평균이 모두 사용된다. 매개변수 과 손실 함수 가 주어지며, 여기서 은 현재의 훈련 반복(에서 색인화됨)을 인덱스한다. 아담의 매개변수 업데이트는 다음과 같이 주어진다.
여기서 은 0으로 나누어지는 것을 방지하기 위해 사용되는 작은 스칼라(예: )이고, (예: 0.99)과 (예: 0.999)는 각각 경사와 두 번째 경사에서 잊혀지는 요인이다. 스쿼링과 사각 로팅은 원소적으로 이루어진다.
아다델타[편집]
아다델타(Adaptive Delta, AdaDelta)는 아다그라드, 알엠에스프롭, 모멘텀 모두를 합친 경사하강법이다. 크게 두 개의 특징이 있다. 첫 번째는 아다그라드의 특징인 모든 스텝의 경사 제곱의 합을 윈도우 사이즈를 두어 윈도우 사이즈만큼의 합으로 변경한다. 이후 알엠에스프롭과 똑같이지수이동평균을 적용한다. 두 번째는 헤시안 근사법(Hessian Approximation)을 이용한 단위(Units) 수정이다.
논문에서는 가중치와 가중치 변화량의 단위가 같아야 한다고 명시되어 있다. 그리고 확률적 경사하강법, 모멘텀, 아다그라드업데이트가 기울기 양의 비율을 포함하므로 정확한 단위를 가지지 않아서 업데이트는 단위가 없다고 설명한다. 그리고 위 수식을 보면 알 수 있듯이 의 단위는 의 단위가 아닌 의 단위의 역수와 관계가 있다는 것을 알 수 있다. 반대로 아다델타의 경우 뉴턴의 방법을 이용하여 아래 수식과 같이 와 의 단위간의 관계를 만든다.[3]
네스테로프 가속 경사[편집]
기본적인 모멘텀 방식은 이동을 중지해야 하는 지점에 도달해도 모멘텀에 의해 해당 지점을 지나칠 수 있다는 문제가 있다. 네스테로프 가속 경사(Nesterov accelerated gradient, NAG)는 이러한 문제점을 해결하기 위해 제안되었다. 네스테로프 가속 경사에서는 모멘텀 계산 시에 모멘텀에 의해 발생하는 변화를 미리 보고 모멘텀을 결정한다. 이를 식으로 나타내면 다음과 같다.
이 때 는 다음과 같이 계산된다.
그 다음, 기본적인 모멘텀 방식과 같이 가중치를 다음과 같이 업데이트한다.
기본적인 모멘텀 방식은 이전의 시간의 모멘텀과 독립적으로 기울기를 계산하여 모멘텀과 기울기를 더함으로써 업데이트의 방향을 결정한다. 반면에 네스테로프 가속 경사에서는 먼저 모멘텀만큼 업데이트를 했다고 가정한 뒤에 기울기를 계산하고, 이를 기반으로 업데이트의 방향을 결정한다. 기본적인 모멘텀 방식은 현재의 가속도를 고려하지 않고 속도를 설정한다면, 네스테로프 가속 경사는 현재의 가속도를 어느 정도 고려하여 속도를 설정한다고 생각할 수 있다. 이러한 업데이트 방식을 통해 네스테로프 가속 경사는 모멘텀을 이용한 빠른 이동이라는 장점을 유지하면서도 모멘텀에 의해 과하게 이동하는 단점을 완화했다.[4]
각주[편집]
- ↑ Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent
- ↑ 2.0 2.1 Stochastic gradient descent Wikipedia - https://en.wikipedia.org/wiki/Stochastic_gradient_descent
- ↑ 3.0 3.1 3.2 흰고래의꿈, 〈수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta)〉, 《티스토리》, 2018-05-29
- ↑ Bool, 〈(머신 러닝/딥 러닝) 인공 신경망을 위한 확률적 경사 하강법〉, 《티스토리》, 2018-12-24
참고자료[편집]
- Stochastic Gradient Descent DeepAI - https://deepai.org/machine-learning-glossary-and-terms/stochastic-gradient-descent
- Stochastic gradient descent Wikipedia - https://en.wikipedia.org/wiki/Stochastic_gradient_descent
- 흰고래의꿈, 〈수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta)〉, 《티스토리》, 2018-05-29
- Bool, 〈(머신 러닝/딥 러닝) 인공 신경망을 위한 확률적 경사 하강법〉, 《티스토리》, 2018-12-24
같이 보기[편집]