Các thuật toán tối ưu trong tensorflow với công thức

Các thuật toán tối ưu trong tensorflow để cập nhật trọng số trong những mô hình huấn luyện cho máy học. Để tìm hiểu cách sử dụng các thuật toán đó, chúng ta viết C(\theta) để chỉ hàm mất mát (cost or loss function), trong đó \theta = (\theta_{1},...\theta_{n})^{T} đại diện tham số hoặc trọng số trong mô hình học nào đó.

1) Tối ưu theo kiểu Gradient descent

Trong kiểu tối ưu này, quy luật để tính toán lại trọng số là:

\theta^{(t+1)} = \theta^{(t)} - \eta \Delta C(\theta^{(t)}),

trong đó \eta chỉ learning_rate.

Code trong python để chạy tối ưu này là:

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

2) Tối ưu theo kiểu Adagrad

Tham số đượ học theo công thức:

\theta_{i}^{(t+1)} = \theta_{i}^{(t)} - \frac{\eta}{\sqrt{\sum_{\tau = 1}^{(t)} (\theta_{i}^{\tau })^{2} + \epsilon}} \frac{\partial \Delta C^{(t)}}{\partial \theta_{i}}

Tensorflow hỗ trợ tối ưu này bởi đoạn mã sau:

optimizer = tf.train.AdagradOptimizer(learning_rate=0.001, initial_accumulator_value=0.1).minimize(cost)

3) Tối ưu kiểu RMSprop

RMSprop là một sự cải thiện từ Rprop. Xem this link để thấy thấy cách thuật toán Rprop làm việc. Vì RMSprop được thiết kế theo kiểu huẩn luyện mini batch, vì vậy để chi tiết chúng ta thay ký hiệu \theta với w_{ij}. Kiểu mẫu của RMSprop là:

g_{ij}^{(t)} = \alpha g_{ij}^{(t-1)} + (1 - \alpha)  (\frac{\partial \Delta C^{(t)}}{\partial w_{ij}})^{2}

w_{ij}^{(t+1)} = w_{ij}^{(t)} -  \frac{\eta}{\sqrt{ g_{ij}^{(t) } +  \epsilon}} \frac{\partial \Delta C^{(t)}}{\partial w_{ij}}

Tensorflow code cho RMSprop là:

optimizer = tf.train.RMSPropOptimizer(learning_rate=0.001, decay =0.9, momentum=0.0, epsilon=1e-10).minimize(cost)

4) Tối ưu kiểu Adadelta

Adadelta là tương tự như RMSprop. Lý do là cả hai giải bài toán fast learning-rate decay của Adagrad. Luật cập nhật trọng số là:

g_{ij}^{(t)} = \gamma g_{ij}^{(t-1)} + (1 - \gamma)   (\frac{\partial \Delta C^{(t)}}{\partial w_{ij}})^{2}

w_{ij}^{(t+1)} = w_{ij}^{(t)} -  \frac{\eta}{\sqrt{  g_{ij}^{(t) } +  \epsilon}} \frac{\partial \Delta C^{(t)}}{\partial  w_{ij}}

Mẫu code cho Adadelta trong python là:

optimizer = tf.train.AdadeltaOptimizer(learning_rate=0.001, rho=0.95, epsilon = 1e-08).minimize(cost)

trong đó rho, learning_rate, và epsilon đại diện \gamma, \eta, và \epsilon, tương ứng.

5) Adam optimizer

Adam (Adaptive Moment Estimator) có quy luật cập nhật trọng số là:

m_{ij}^{(t)} = \beta_{1} m_{ij}^{(t-1)} + (1 - \beta_{1}) \frac{\partial \Delta C^{(t)}}{\partial w_{ij}}

v_{ij}^{(t)} = \beta_{2} v_{ij}^{(t-1)} + (1 - \beta_{2})    (\frac{\partial \Delta C^{(t)}}{\partial w_{ij}})^{2}

\hat{m}_{ij}^{(t)} = \frac{ m_{ij}^{(t)}}{(1 - \beta_{1}^{t})}

\hat{v}_{ij}^{(t)} = \frac{ v_{ij}^{(t)}}{(1 - \beta_{2}^{t})}

w_{ij}^{(t+1)} = w_{ij}^{(t)} -  \frac{\eta}{\sqrt{   \hat{v}_{ij}^{(t) } +  \epsilon}} \frac{\partial \Delta C^{(t)}}{\partial   w_{ij}}

Python code cho tối ưu này là:

optimizer = tf.train.AdamOptimizer(learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-08).minimize(cost)

6) Momentum optimizer and Nesterov algorithm

Quy luật cập nhật tối ưu Momentum bỏ qua thuật toán Nesterov là:

v_{i}^{(t + 1)} = \alpha v_{i}^{(t)} -  \eta \frac{\partial \Delta C^{(t)}}{\partial w_{i}}\big (w_{i}^{(t)} \big )

w_{i}^{t + 1} = w_{i}^{(t)} + v_{i}^{(t + 1)}.

Với Nesterow accelerated gradient, quy luật cập nhật trọng số trở thành:

\theta^{\big (t + \frac {1}{2}\big )} = \theta^{(t)} + \alpha v^{(t)}

v^{(t + 1)} = \alpha v^{(t)} -  \eta \Delta C^{(t)}\big [ \theta = \theta^{\big (t + \frac {1}{2}\big )} \big ]

\theta^{(t + 1)} = \theta^{(t)} + v^{(t + 1)}

:

optimizer = tf.train.MomentumOptimizer.(learning_rate=0.001, momentum=0.9,use_nesterov=False).minimize(cost)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *