Deep Learning

Gradient descent algorithm in Tensor flow 경사하강법

YunSeong 2023. 11. 5. 20:12
728x90
반응형

1. gradient descent

gradient descent는 함수의 최소값을 찾는 알고리즘이다.

 

그림과 같이 무작위 값에 

기울기 값 * learning_rate를 곱해서 빼는 과정을 반복하면서 점점 주변 값보다 작은 값을 찾아간다.

 

 

 

 

 

 

 

 

 

 

 

2. gradient descent in tensorflow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import tensorflow as tf
 
tf.random.set_seed(0)
 
= tf.Variable(tf.random.normal([1], -100.100.))
 
for step in range(300) :
    learning_rate = 0.01
    
    with tf.GradientTape() as tape :
        func = tf.square(W)
 
    W_grad = tape.gradient(func, [W])[0]
    W.assign_sub(tf.multiply(learning_rate, W_grad).numpy())
    
    if step % 10 == 0 :
        print('{} | {} | {}'.format(step, func.numpy(), W.numpy()))
cs

3. 랜덤 시드를 정의한다.

5. W를 변수로 정의하고 무작위 값을 넣는다.

10. 미분을 위해서 GradientTape를 생성한다.

11. 이차함수를 정의한다.

13. W에서 함수의 기울기를 구한다.

14. W -= learning_rate * W_grad

16~17. 10번 실행할 때마다 step, func(W), W를 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
0 | [2611.85| [50.084137]
10 | [1743.692| [40.922386]
20 | [1164.1028| [33.43657]
30 | [777.1642| [27.32011]
40 | [518.84094| [22.32252]
50 | [346.38245| [18.239126]
60 | [231.24765| [14.902693]
70 | [154.38278| [12.176585]
80 | [103.0672| [9.949158]
90 | [68.808495| [8.129187]
100 | [45.9371| [6.6421375]
110 | [30.667976| [5.42711]
120 | [20.47419| [4.4343443]
130 | [13.668731| [3.6231823]
140 | [9.125353| [2.9604034]
150 | [6.092157| [2.418865]
160 | [4.067172| [1.9763887]
170 | [2.7152765| [1.6148534]
180 | [1.8127401| [1.3194528]
190 | [1.2102| [1.078089]
200 | [0.807939| [0.8808772]
210 | [0.5393866| [0.7197408]
220 | [0.3600988| [0.5880807]
230 | [0.24040481| [0.48050472]
240 | [0.16049618| [0.39260736]
250 | [0.10714854| [0.3207888]
260 | [0.07153322| [0.26210782]
270 | [0.04775614| [0.21416116]
280 | [0.03188238| [0.17498526]
290 | [0.02128493| [0.14297569]
cs

위와 같이 결과를 보면 func(w) = w^2 인 함수의 최솟값인 0을 향해 가까워 지는 것을 볼 수 있다.

728x90
반응형