天天看點

《PyTorch深度學習實踐》 學習筆記1

1、線性模型

x(hours) y(points)
1         2
2 4
3 6
4 ?

樣本  Trainning loss error

loss=

《PyTorch深度學習實踐》 學習筆記1

Trainning Set

《PyTorch深度學習實踐》 學習筆記1
《PyTorch深度學習實踐》 學習筆記1

 1.1、窮舉求w使得損失最小

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

w_list = []
mse_list = []
for w in np.arange(0.0, 4.1, 0.1):
    print("w=", w)
    loss_sum = 0
    for x_val, y_val in zip(x_data, y_data):
        y_pred_val = x_val * w
        loss_val = (y_pred_val - y_val) ** 2
        loss_sum+=loss_val
        print(y_pred_val,loss_val)
    print("MES=",loss_sum/3)
    w_list.append(w)
    mse_list.append(loss_sum/3)
plt.plot(w_list,mse_list)
plt.xlabel('w')
plt.ylabel("loss")
plt.show()
           
《PyTorch深度學習實踐》 學習筆記1

1.2、梯度下降算法

        為了充分利用凸優化中一些高效、成熟的優化方法,比如共轭梯度、拟牛頓 法等,很多機器學習方法都傾向于選擇合适的模型和損失函數,以構造一個凸函 數作為優化目标.但也有很多模型(比如神經網絡)的優化目标是非凸的,隻能退而求其次找到局部最優解.

        在機器學習中, 最簡單 、 常用的優化算法就是 梯度下降法 ,即首先初始化參數 𝜃 0 , 然後按下面的疊代公式來計算訓練集 𝒟 上風險函數的最小值:   

《PyTorch深度學習實踐》 學習筆記1

其中 𝜃 𝑡 為第 𝑡 次疊代時的參數值 , 𝛼 為搜尋步長 . 在機器學習中 , 𝛼 一般稱為 學習 率 ( Learning Rate )。

《PyTorch深度學習實踐》 學習筆記1
import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = 1.0  # 設定起始點

epoch_list=[]
cost_list=[]
# 求某一w下的平均損失
def Cost(xs, ys):
    cost = 0
    for x, y in zip(xs, ys):
        y_pred = x * w
        cost += (y_pred - y) ** 2
    return cost / len(xs)


def gradient(xs, ys):
    grad = 0
    for x, y in zip(xs, ys):
        grad += 2 * (x * w - y) * x
    return grad / len(xs)


print('Predict (before training)', 4, 4 * w)
for epoch in range(100):
    epoch_list.append(epoch)
    cost_val = Cost(x_data, y_data)
    cost_list.append(cost_val)
    grad_val = gradient(x_data, y_data)
    w -= 0.01 * grad_val  # update
    print('Epoch:', epoch, 'w=', w, 'loss=', cost_val)
print('Predict (after training)', 4, 4 * w)
plt.plot(epoch_list,cost_list)
plt.xlabel('epoch')
plt.ylabel("cost")
plt.title('Cost in each  epoch')
plt.show()
           
《PyTorch深度學習實踐》 學習筆記1

1.3、随機梯度下降算法

         在機器學習中,我們假設每個樣本都是獨立同分布地從真實資料分布中随 機抽取出來的,真正的優化目标是期望風險最小.批量梯度下降法相當于是從 真實資料分布中采集 𝑁 個樣本,并由它們計算出來的經驗風險的梯度來近似期 望風險的梯度.為了減少每次疊代的計算複雜度,我們也可以在每次疊代時隻 采集一個樣本,計算這個樣本損失函數的梯度并更新參數,即随機梯度下降法 (Stochastic Gradient Descent,SGD). 當經過足夠次數的疊代時,随機梯度下降 也可以收斂到局部最優解 。

        批量梯度下降和随機梯度下降之間的差別在于,每次疊代的優化目标是對所有樣本的平均損失函數還是對單個樣本的損失函數.由于随機梯度下降實作 簡單,收斂速度也非常快,是以使用非常廣泛。在非凸優化問題中,随機梯度下降更容易逃離局 部最優點。

概括:對于每一個樣本進行梯度更新,而不是對于所有的樣本。

《PyTorch深度學習實踐》 學習筆記1
《PyTorch深度學習實踐》 學習筆記1

1.4、小批量梯度下降算法

        随機梯度下降法的一個缺點是無法充分利用計算機的并行計算能力. 小批量梯度下降法 ( Mini-Batch Gradient Descent )是批量梯度下降和随機梯度下降的折中 . 每次疊代時 ,我們随機選取一小部分訓練樣本來計算梯度并更新參 數 , 這樣既可以兼顧随機梯度下降法的優點 , 也可以提高訓練效率。         第𝑡 次疊代時 , 随機選取一個包含 𝐾 個樣本的子集 𝒮 𝑡 ,計算這個子集上每個樣本損失函數的梯度并進行平均 , 然後再進行參數更新 :

《PyTorch深度學習實踐》 學習筆記1

在實際應用中 , 小批量随機梯度下降法有收斂快 、 計算開銷小的優點 ,是以 逐漸成為大規模的機器學習中的主要優化算法。

繼續閱讀