1. 程式人生 > >梯度下降、過擬合和歸一化

梯度下降、過擬合和歸一化

href tps 課程 容易 視頻 iteration col one shu

好的課程應該分享給更多人:人工智能視頻列表-尚學堂,點開任意一個之後會發現他們會提供系列課程整合到一起的百度網盤下載地址,包括視頻+代碼+資料,免費的優質資源。當然,現在共享非常多,各種mooc、博客、論壇等,很容易就可以找到各種各樣的知識,能走到哪一步,都在我們自己。希望我能夠一直堅持下去,加油!

梯度下降法

看這個吧,簡書上的:深入淺出--梯度下降法及其實現

批量梯度下降

  ·初始化W,即隨機W,給初值

  · 沿著負梯度方向叠代,更新後的W使得損失函數J(w)更小

  · 如果W維度是幾百維度,直接算SVD也是可以的,幾百維度以上一般是梯度下降算法

  ·

# 批量梯度下降
import numpy as np # 自己創建建數據,哈哈 X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) X_b = np.c_[np.ones((100, 1)), X] learning_rate = 0.1 # 學習率,步長=學習率x梯度 n_iterations = 1000 # 叠代次數,一般不設置閾值,只設置超參數,叠代次數 m = 100 # m個樣本 theta = np.random.randn(2, 1) # 初始化參數theta,w0,...,wn count = 0 #
計數 for iteration in range(n_iterations): count += 1 # 求梯度 gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y) # 叠代更新theta值 theta = theta - learning_rate * gradients # print(count, theta) print(count, theta)

隨機梯度下降

  · 優先選擇隨機梯度下降

  · 有些時候隨機梯度下降可以跳出局部最小值

import numpy as np

X 
= 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) X_b = np.c_[np.ones((100, 1)), X] n_epochs = 500 t0, t1 = 5, 50 m = 100 def learning_schedule(t): return t0/(t + t1) # 隨機初始化參數值 theta = np.random.randn(2, 1) for epoch in range(n_epochs): for i in range(m): random_index = np.random.randint(m) xi = X_b[random_index:random_index+1] yi = y[random_index:random_index+1] gradients = 2*xi.T.dot(xi.dot(theta)-yi) learning_rate = learning_schedule(epoch*m + i) theta = theta - learning_rate * gradients print(theta)

梯度下降、過擬合和歸一化