<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gradient Descent |</title><link>https://chaeniverse.github.io/tags/gradient-descent/</link><atom:link href="https://chaeniverse.github.io/tags/gradient-descent/index.xml" rel="self" type="application/rss+xml"/><description>Gradient Descent</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Fri, 27 Jan 2023 00:00:00 +0000</lastBuildDate><image><url>https://chaeniverse.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Gradient Descent</title><link>https://chaeniverse.github.io/tags/gradient-descent/</link></image><item><title>Newton-Raphson Method &amp; Gradient Method</title><link>https://chaeniverse.github.io/blog/newton-raphson-gradient/</link><pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/newton-raphson-gradient/</guid><description>&lt;p&gt;곡선의 접선을 그리고, 그 접선이 알려주는 방향으로 한 걸음씩 옮겨가며 해 (또는 극점) 에 가까워지는 두 가지 반복적인 방법을 정리한다. 같은 예제 $y = x^2$ 로 비교한다.&lt;/p&gt;
&lt;h2 id="newton-raphson-method"&gt;Newton-Raphson Method&lt;/h2&gt;
&lt;p&gt;방정식 $f(x) = 0$ 의 해를 구하는 방법. 현재 위치 $x_n$ 에서 곡선의 &lt;strong&gt;접선&lt;/strong&gt;을 그리고, 그 접선이 $x$ 축과 만나는 점을 다음 위치 $x_{n+1}$ 로 삼는다.&lt;/p&gt;
&lt;p&gt;접선의 식:&lt;/p&gt;
$$y = f(x_n) + f'(x_n)(x - x_n)$$&lt;p&gt;이 직선이 $y=0$ 이 되는 $x$ 를 풀면&lt;/p&gt;
$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$&lt;h3 id="예제"&gt;예제: $y = x^2$&lt;/h3&gt;
&lt;p&gt;$f(x) = x^2$, $f'(x) = 2x$ 이므로&lt;/p&gt;
$$x_{n+1} = x_n - \frac{x_n^2}{2x_n} = x_n - \frac{x_n}{2} = \frac{x_n}{2}$$&lt;p&gt;$x_0 = 8$ 부터 시작하면 $x_1 = 4, x_2 = 2, x_3 = 1, \dots$ 매 step마다 절반으로 줄어들며 해 $x^* = 0$ 에 접근한다. (그림에서 $x_0 \to x_1 \to x_2 \to \dots \to x^*$)&lt;/p&gt;
&lt;h2 id="gradient-method"&gt;Gradient Method&lt;/h2&gt;
&lt;p&gt;함수 $f(x)$ 의 &lt;strong&gt;극점(보통 최솟값)&lt;/strong&gt; 을 찾는 방법. 현재 위치 $x_n$ 에서 그래디언트(도함수)의 반대 방향으로 step size $\alpha$ 만큼 이동한다.&lt;/p&gt;
$$x_{n+1} = x_n - \alpha \cdot f'(x_n)$$&lt;p&gt;여기서 $\alpha$ 는 한 번에 너무 크게 이동하는 것을 방지하기 위한 &lt;strong&gt;하이퍼파라미터&lt;/strong&gt; (learning rate / step size). 이 $\alpha$ 를 어떻게 적응적으로 조절하느냐가 &lt;strong&gt;AdaGrad, Adam&lt;/strong&gt; 같은 옵티마이저 변종의 핵심.&lt;/p&gt;
&lt;h3 id="예제-1"&gt;예제: $y = x^2$&lt;/h3&gt;
&lt;p&gt;$f'(x) = 2x$, $\alpha = 0.1$ 이라고 하자. $x^{(1)} = 5$ 부터 시작하면&lt;/p&gt;
$$x^{(2)} = 5 - 0.1 \cdot 2 \cdot 5 = 5 - 1 = 4$$$$x^{(3)} = 4 - 0.1 \cdot 2 \cdot 4 = 4 - 0.8 = 3.2$$$$\vdots$$&lt;p&gt;일반화하면&lt;/p&gt;
$$x^{(i+1)} = x^{(i)} - \alpha \cdot f'(x^{(i)})$$&lt;p&gt;매 step마다 $x$ 가 $0.8$ 배씩 (= $1 - 2\alpha$) 줄어들며 $x^* = 0$ 에 접근한다.&lt;/p&gt;
&lt;h2 id="두-방법-비교"&gt;두 방법 비교&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Newton-Raphson&lt;/th&gt;
&lt;th&gt;Gradient Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;목적&lt;/td&gt;
&lt;td&gt;$f(x) = 0$ (해 찾기)&lt;/td&gt;
&lt;td&gt;$\min f(x)$ (극점 찾기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;업데이트&lt;/td&gt;
&lt;td&gt;$x_{n+1} = x_n - f(x_n)/f'(x_n)$&lt;/td&gt;
&lt;td&gt;$x_{n+1} = x_n - \alpha \cdot f'(x_n)$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;step size&lt;/td&gt;
&lt;td&gt;자동 (도함수 비)&lt;/td&gt;
&lt;td&gt;수동 (하이퍼파라미터 $\alpha$)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;필요 정보&lt;/td&gt;
&lt;td&gt;$f, f'$&lt;/td&gt;
&lt;td&gt;$f'$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수렴 속도&lt;/td&gt;
&lt;td&gt;보통 빠름 (이차 수렴)&lt;/td&gt;
&lt;td&gt;$\alpha$에 의존 (보통 일차)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;참고: 최적화 맥락에서 Newton&amp;rsquo;s method (&amp;ldquo;Newton&amp;rsquo;s optimization&amp;rdquo;) 는 $f'(x) = 0$ 의 해를 Newton-Raphson으로 찾는 것이라 $x_{n+1} = x_n - f'(x_n)/f''(x_n)$ 형태가 된다. 이때는 2차 도함수 $f''$ 가 필요하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>