深度學習

发布时间:2024-12-26 11:46

深度阅读是对知识的深度挖掘 #生活乐趣# #阅读乐趣# #深度阅读#

梯度下降的基本概念

梯度下降(Gradient Descent)是一種用于優化機器學習模型參數的算法,其目的是最小化損失函數,從而提高模型的預測精度。梯度下降的核心思想是通過迭代地調整參數,沿著損失函數下降的方向前進,最終找到最優解。

生活中的背景例子:尋找山谷的最低點

想象你站在一個山谷中,眼睛被蒙住,只能用腳感受地面的坡度來找到山谷的最低點(即損失函數的最小值)。你每一步都想朝著坡度下降最快的方向走,直到你感覺不到坡度,也就是你到了最低點。這就好比在優化一個模型時,通過不斷調整參數,使得模型的預測誤差(損失函數)越來越小,最終找到最佳參數組合。

梯度下降的具體方法及其優化 1. 批量梯度下降(Batch Gradient Descent)

生活中的例子
你決定每次移動之前,都要先測量整個山谷的坡度,然后再決定移動的方向和步幅。雖然每一步的方向和步幅都很準確,但每次都要花很多時間來測量整個山谷的坡度。

公式
θ : = θ ? η ? ? θ J ( θ ) \theta := \theta - \eta \cdot \nabla_{\theta} J(\theta) θ:=θ?η??θ?J(θ)
其中:

θ \theta θ是模型參數 η \eta η是學習率 ? θ J ( θ ) \nabla_{\theta} J(\theta) ?θ?J(θ)是損失函數 J ( θ ) J(\theta) J(θ)關于 θ \theta θ的梯度

API
TensorFlow

optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

PyTorch

optimizer = torch.optim.SGD(model.parameters(), lr=0.01) 2. 隨機梯度下降(Stochastic Gradient Descent, SGD)

生活中的例子
你決定每一步都只根據當前所在位置的坡度來移動。雖然這樣可以快速決定下一步怎么走,但由于只考慮當前點,可能會導致路徑不穩定,有時候會走過頭。

公式
θ : = θ ? η ? ? θ J ( θ ; x ( i ) , y ( i ) ) \theta := \theta - \eta \cdot \nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}) θ:=θ?η??θ?J(θ;x(i),y(i))
其中 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i))是當前樣本的數據

API
TensorFlowPyTorch 中的API與批量梯度下降相同,具體行為取決于數據的加載方式。例如在訓練時可以一批數據包含一個樣本。

3. 小批量梯度下降(Mini-Batch Gradient Descent)

生活中的例子
你決定每次移動之前,只測量周圍一小部分區域的坡度,然后根據這小部分區域的平均坡度來決定方向和步幅。這樣既不需要花太多時間測量整個山谷,也不會因為只看一個點而導致路徑不穩定。

公式
θ : = θ ? η ? ? θ J ( θ ; B ) \theta := \theta - \eta \cdot \nabla_{\theta} J(\theta; \mathcal{B}) θ:=θ?η??θ?J(θ;B)
其中 B \mathcal{B} B是當前小批量的數據

API
TensorFlowPyTorch 中的API與批量梯度下降相同,但在數據加載時使用小批量。

4. 動量法(Momentum)

生活中的例子
你在移動時,不僅考慮當前的坡度,還考慮之前幾步的移動方向,就像帶著慣性一樣。如果前幾步一直往一個方向走,那么你會傾向于繼續往這個方向走,減少來回震蕩。

公式
v : = β v + ( 1 ? β ) ? θ J ( θ ) v := \beta v + (1 - \beta) \nabla_{\theta} J(\theta) v:=βv+(1?β)?θ?J(θ)
θ : = θ ? η v \theta := \theta - \eta v θ:=θ?ηv
其中:

v v v是動量項 β \beta β是動量系數(通常接近1,如0.9)

API
TensorFlow

optimizer = tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9)

PyTorch

optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9) 5. RMSProp

生活中的例子
你在移動時,會根據最近一段時間內每一步的坡度情況,動態調整步幅。比如,當坡度變化劇烈時,你會邁小步,當坡度變化平緩時,你會邁大步。

公式
s : = β s + ( 1 ? β ) ( ? θ J ( θ ) ) 2 s := \beta s + (1 - \beta) (\nabla_{\theta} J(\theta))^2 s:=βs+(1?β)(?θ?J(θ))2
θ : = θ ? η s + ? ? θ J ( θ ) \theta := \theta - \frac{\eta}{\sqrt{s + \epsilon}} \nabla_{\theta} J(\theta) θ:=θ?s+?

?η??θ?J(θ)
其中:

s s s是梯度平方的加權平均值 ? \epsilon ?是一個小常數,防止除零錯誤

API
TensorFlow

optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.001)

PyTorch

optimizer = torch.optim.RMSprop(model.parameters(), lr=0.001) 6. Adam(Adaptive Moment Estimation)

生活中的例子
你在移動時,結合動量法和RMSProp的優點,不僅考慮之前的移動方向(動量),還根據最近一段時間內的坡度變化情況(調整步幅),從而使移動更加平穩和高效。

公式
m : = β 1 m + ( 1 ? β 1 ) ? θ J ( θ ) m := \beta_1 m + (1 - \beta_1) \nabla_{\theta} J(\theta) m:=β1?m+(1?β1?)?θ?J(θ)
v : = β 2 v + ( 1 ? β 2 ) ( ? θ J ( θ ) ) 2 v := \beta_2 v + (1 - \beta_2) (\nabla_{\theta} J(\theta))^2 v:=β2?v+(1?β2?)(?θ?J(θ))2
m ^ : = m 1 ? β 1 t \hat{m} := \frac{m}{1 - \beta_1^t} m^:=1?β1t?m?
v ^ : = v 1 ? β 2 t \hat{v} := \frac{v}{1 - \beta_2^t} v^:=1?β2t?v?
θ : = θ ? η m ^ v ^ + ? \theta := \theta - \eta \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon} θ:=θ?ηv^

?+?m^?
其中:

m m m和 v v v分別是梯度的一階和二階動量 β 1 \beta_1 β1?和 β 2 \beta_2 β2?是動量系數(通常分別取0.9和0.999) m ^ \hat{m} m^和 v ^ \hat{v} v^是偏差校正后的動量項 t t t是時間步

API
TensorFlow

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)

PyTorch

optimizer = torch.optim.Adam(model.parameters(), lr=0.001) 綜合應用示例

假設我們在使用TensorFlow和PyTorch訓練一個簡單的神經網絡,以下是如何應用這些優化方法的示例代碼。

TensorFlow 示例

import tensorflow as tf# 定義模型 model = tf.keras.Sequential([tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),tf.keras.layers.Dense(10, activation='softmax') ])# 編譯模型并選擇優化器 optimizer = tf.keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 準備數據 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0# 訓練模型 model.fit(x_train, y_train, epochs=10, batch_size=32)

PyTorch 示例

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader# 定義模型 class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.fc1 = nn.Linear(784, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = SimpleNN()# 選擇優化器 optimizer = torch.optim.Adam(model.parameters(), lr=0.001) criterion = nn.CrossEntropyLoss()# 準備數據 transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)# 訓練模型 for epoch in range(10):for batch in train_loader:x_train, y_train = batchx_train = x_train.view(x_train.size(0), -1) # Flatten the imagesoptimizer.zero_grad()outputs = model(x_train)loss = criterion(outputs, y_train)loss.backward()optimizer.step() 更多問題咨詢 CosAI

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處:https://dhexx.cn/hk/5380003.html

如若內容造成侵權/違法違規/事實不符,請聯系我的編程經驗分享網進行投訴反饋,一經查實,立即刪除!

网址:深度學習 https://www.yuejiaxmz.com/news/view/574193

相关内容

在家學習的好處:如何利用家庭學習環境提升學習效率
一文看懂機器學習「3種學習方法+7個實操步驟+15種常見算法」
提高學習效率的常用方法
親子育兒小妙招 怎樣幫孩子養成學習生活的好習慣?
湟中區:打造“三大課堂”持續學習貫徹黨的二十大精神
自治區人大常委會黨組召開黨史學習教育專題民主生活會
情緒管理課程學習心得(10/4/2006)
生活哲學
推進智慧教育與傳統教育深度融合
學苑論衡:不懈探索人與自然和諧共生的科學路徑

随便看看