中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)春網(wǎng)站品牌seo培訓(xùn)咨詢

長(zhǎng)春網(wǎng)站,品牌seo培訓(xùn)咨詢,小規(guī)模公司怎么注冊(cè),2345網(wǎng)址導(dǎo)航怎么樣🏆作者簡(jiǎn)介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長(zhǎng),在技術(shù)的道路上持續(xù)探索和實(shí)踐。 🏆多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 🎉歡迎 👍點(diǎn)贊?評(píng)論…

在這里插入圖片描述

🏆作者簡(jiǎn)介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長(zhǎng),在技術(shù)的道路上持續(xù)探索和實(shí)踐。
🏆多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。
🎉歡迎 👍點(diǎn)贊?評(píng)論?收藏

文章目錄

  • 🏆人工智能(邏輯回歸算法)
    • 🔎 一、邏輯回歸算法知識(shí)
      • 🍁🍁 01. 梯度下降法(Gradient Descent)
        • 🍁 1.1 什么是梯度下降法?
        • 🍁 1.2 梯度下降法的具體步驟和算法公式?
        • 🍁 1.3 梯度下降法的算法公式實(shí)現(xiàn)?
      • 🍁🍁 02. 牛頓法(Newton's Method)和擬牛頓法(Quasi-Newton Methods)
        • 🍁 2.1 什么是牛頓法和擬牛頓法?
        • 🍁 2.2 牛頓法和擬牛頓法的具體步驟和算法公式?
        • 🍁 2.3 牛頓法和擬牛頓法的算法公式實(shí)現(xiàn)?
      • 🍁🍁 03. 共軛梯度法(Conjugate Gradient)
        • 🍁 3.1 什么是共軛梯度法?
        • 🍁 3.2 共軛梯度法的具體步驟和算法公式?
        • 🍁 3.3 共軛梯度法的算法公式實(shí)現(xiàn)?
      • 🍁🍁 04. 改進(jìn)的隨機(jī)梯度下降法(Improved Stochastic Gradient Descent)
        • 🍁 4.1 什么是改進(jìn)的隨機(jī)梯度下降法?
      • 🍁🍁 05. Adagrad(自適應(yīng)梯度算法)
        • 🍁 5.1 什么是 Adagrad?
        • 🍁 5.2 RMSprop(均方根傳播)的具體步驟和算法公式?
        • 🍁 5.3 RMSprop(均方根傳播)的算法公式實(shí)現(xiàn)?
      • 🍁🍁 06. RMSprop(均方根傳播)
        • 🍁 6.1 什么是RMSprop?
        • 🍁 6.2 Adam(自適應(yīng)矩估計(jì))的具體步驟和算法公式?
        • 🍁 6.3 Adam(自適應(yīng)矩估計(jì))的算法公式實(shí)現(xiàn)?
      • 🍁🍁 07. Adam(自適應(yīng)矩估計(jì))
        • 🍁 7.1 什么是 Adam?
        • 🍁 7.2 Adam的具體步驟和算法公式?
        • 🍁 7.3 Adam的算法公式實(shí)現(xiàn)?
      • 🍁🍁 08. LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)
        • 🍁 8.1 什么是 LBFGS?
        • 🍁 8.2 LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)的具體步驟和算法公式?
        • 🍁 8.3 LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)的算法公式實(shí)現(xiàn)?
      • 🍁🍁 09. Adamax
        • 🍁 9.1 什么是 Adamax ?
        • 🍁 9.2 Adamax的具體步驟和算法公式?
        • 🍁 9.3 Nadam的算法公式實(shí)現(xiàn)?
      • 🍁🍁 10. Nadam
        • 🍁 10.1 什么是**Nadam ?
        • 🍁 10.2 Nadam的具體步驟和算法公式?
        • 🍁 10.3 Nadam的算法公式實(shí)現(xiàn)?

🏆人工智能(邏輯回歸算法)

🔎 一、邏輯回歸算法知識(shí)

🍁🍁 01. 梯度下降法(Gradient Descent)

🍁 1.1 什么是梯度下降法?

梯度下降法是最常用的優(yōu)化算法之一。它通過迭代更新模型參數(shù),沿著損失函數(shù)梯度的反方向逐步進(jìn)行參數(shù)調(diào)整。包括批量梯度下降(Batch Gradient Descent)、隨機(jī)梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-batch Gradient Descent)等變種。

🍁 1.2 梯度下降法的具體步驟和算法公式?

梯度下降法是一種常用的優(yōu)化算法,用于最小化一個(gè)函數(shù)的值。該算法通常用于機(jī)器學(xué)習(xí)中的模型訓(xùn)練過程,例如邏輯回歸、線性回歸等。下面是梯度下降法的具體步驟和算法公式:

算法輸入:學(xué)習(xí)率(learning rate) α \alpha α、迭代次數(shù) T T T、損失函數(shù) J ( θ ) J(\theta) J(θ)

  1. 初始化參數(shù) θ = [ θ 1 , θ 2 , . . . , θ n ] \theta = [\theta_1, \theta_2, ..., \theta_n] θ=[θ1?,θ2?,...,θn?],其中 n n n 表示模型參數(shù)的個(gè)數(shù)。

  2. 將迭代次數(shù)設(shè)置為 t = 0 t = 0 t=0

  3. 如果 t > T t > T t>T,則停止迭代,否則繼續(xù)下面的步驟。

  4. 計(jì)算損失函數(shù) J ( θ ) J(\theta) J(θ) 對(duì)參數(shù) θ \theta θ 的梯度 ? θ J ( θ ) \nabla_\theta J(\theta) ?θ?J(θ)。

  5. 根據(jù)學(xué)習(xí)率 α \alpha α,更新參數(shù) θ \theta θ
    在這里插入圖片描述

  6. 將迭代次數(shù) t t t 加 1。

  7. 返回步驟 3。在這里插入圖片描述

🍁 1.3 梯度下降法的算法公式實(shí)現(xiàn)?

梯度下降法的算法公式可以很簡(jiǎn)單地實(shí)現(xiàn)。下面是一個(gè)基本的梯度下降算法的偽代碼:

輸入: 學(xué)習(xí)率 α \alpha α,迭代次數(shù) T T T,初始參數(shù) θ \theta θ

Repeat T T T 次: 計(jì)算損失函數(shù) J ( θ ) J(\theta) J(θ) 對(duì)參數(shù) θ \theta θ 的梯度 ? θ J ( θ ) \nabla_\theta J(\theta) ?θ?J(θ) 更新參數(shù) θ = θ ? α ? θ J ( θ ) \theta = \theta - \alpha \nabla_\theta J(\theta) θ=θ?α?θ?J(θ)

返回參數(shù) θ \theta θ

以下是一個(gè)簡(jiǎn)化的 Python 實(shí)現(xiàn)代碼示例:

def gradient_descent(X, y, learning_rate, iterations):# 初始化參數(shù)theta = np.zeros(X.shape[1])m = len(y)for i in range(iterations):# 計(jì)算模型預(yù)測(cè)值h = np.dot(X, theta)# 計(jì)算損失函數(shù)對(duì)參數(shù)的偏導(dǎo)數(shù)gradient = (1 / m) * np.dot(X.T, (h - y))# 更新參數(shù)theta = theta - learning_rate * gradientreturn theta

在這個(gè)代碼中,X 是特征矩陣,y 是目標(biāo)向量,learning_rate 是學(xué)習(xí)率,iterations 是迭代次數(shù)。通過計(jì)算參數(shù)梯度和更新參數(shù),最終返回訓(xùn)練得到的參數(shù) θ \theta θ。

請(qǐng)注意,該代碼示例假設(shè)使用線性回歸進(jìn)行梯度下降,因此對(duì)應(yīng)的損失函數(shù)為均方誤差。對(duì)于不同的模型和損失函數(shù),需要根據(jù)具體情況進(jìn)行相應(yīng)的修改。

🍁🍁 02. 牛頓法(Newton’s Method)和擬牛頓法(Quasi-Newton Methods)

🍁 2.1 什么是牛頓法和擬牛頓法?

牛頓法和擬牛頓法是一類基于二階導(dǎo)數(shù)信息的優(yōu)化算法。牛頓法使用二階導(dǎo)數(shù)(海森矩陣)來更新參數(shù),可以更快地收斂,但計(jì)算代價(jià)較高。擬牛頓法通過近似海森矩陣來降低計(jì)算復(fù)雜度,并在一定程度上保持收斂性能。

🍁 2.2 牛頓法和擬牛頓法的具體步驟和算法公式?

牛頓法(Newton’s Method)和擬牛頓法(Quasi-Newton Method)都是一種迭代優(yōu)化算法,用于求解無約束優(yōu)化問題。它們通過逐步逼近目標(biāo)函數(shù)的最小值點(diǎn),并更新參數(shù)的方法不同。下面分別介紹牛頓法和擬牛頓法的具體步驟和算法公式:

  1. 牛頓法: 牛頓法利用目標(biāo)函數(shù)的二階導(dǎo)數(shù)(海森矩陣)來逼近目標(biāo)函數(shù)的局部形狀,并通過更新參數(shù)來逼近最小值點(diǎn)。

    輸入:目標(biāo)函數(shù) f ( x ) f(x) f(x), 初始點(diǎn) x 0 x_0 x0?,迭代停止準(zhǔn)則(例如,梯度大小或迭代次數(shù))

    1. 初始化 x = x 0 x = x_0 x=x0?,設(shè)置迭代次數(shù) k = 0 k = 0 k=0
    2. 計(jì)算目標(biāo)函數(shù)的一階導(dǎo)數(shù)(梯度)和二階導(dǎo)數(shù)(海森矩陣): g k = ? f ( x k ) g_k = \nabla f(x_k) gk?=?f(xk?) H k = ? 2 f ( x k ) H_k = \nabla^2 f(x_k) Hk?=?2f(xk?)。
    3. 求解方程 H k Δ x = ? g k H_k \Delta x = -g_k Hk?Δx=?gk?,得到搜索方向 Δ x \Delta x Δx。
    4. 選擇合適的步長(zhǎng) α \alpha α,更新參數(shù): x k + 1 = x k + α Δ x x_{k+1} = x_k + \alpha \Delta x xk+1?=xk?+αΔx。
    5. 若滿足停止準(zhǔn)則(如梯度的大小是否小于某個(gè)閾值),則停止迭代;否則,令 k = k + 1 k = k + 1 k=k+1,返回步驟 2。

在每次迭代中,牛頓法使用搜索方向和步長(zhǎng)來更新參數(shù),并在每一步中計(jì)算目標(biāo)函數(shù)的一階和二階導(dǎo)數(shù)。相比于梯度下降法,牛頓法可以更快地收斂到最小值附近。

  1. 擬牛頓法: 擬牛頓法是對(duì)牛頓法的改進(jìn),因?yàn)橛?jì)算精確的海森矩陣較為困難,擬牛頓法使用近似的方法來構(gòu)造參數(shù)更新規(guī)則。

    輸入:目標(biāo)函數(shù) f ( x ) f(x) f(x),初始點(diǎn) x 0 x_0 x0?,迭代停止準(zhǔn)則,初始的近似海森矩陣 B 0 B_0 B0?

    1. 初始化 x = x 0 x = x_0 x=x0?,設(shè)置迭代次數(shù) k = 0 k = 0 k=0。
    2. 計(jì)算目標(biāo)函數(shù)的一階導(dǎo)數(shù)(梯度): g k = ? f ( x k ) g_k = \nabla f(x_k) gk?=?f(xk?)。
    3. 求解方程 B k Δ x = ? g k B_k \Delta x = -g_k Bk?Δx=?gk?,得到搜索方向 Δ x \Delta x Δx。
    4. 選擇合適的步長(zhǎng) α \alpha α,更新參數(shù): x k + 1 = x k + α Δ x x_{k+1} = x_k + \alpha \Delta x xk+1?=xk?+αΔx
    5. 計(jì)算新迭代點(diǎn)的梯度 g k + 1 = ? f ( x k + 1 ) g_{k+1} = \nabla f(x_{k+1}) gk+1?=?f(xk+1?)。
    6. 使用近似的方法更新近似海森矩陣 B k B_k Bk?。
    7. 若滿足停止準(zhǔn)則(如梯度的大小是否小于某個(gè)閾值),則停止迭代;否則,令 k = k + 1 k = k + 1 k=k+1,返回步驟 3。

擬牛頓法中,迭代過程中的海森矩陣 B k B_k Bk? 是通過歷史的一階導(dǎo)數(shù)和參數(shù)更新值來逼近目標(biāo)函數(shù)的海森矩陣。常用的擬牛頓法包括DFP(Davidon-Fletcher-Powell)方法和BFGS(Broyden-Fletcher-Goldfarb-Shanno)方法等。

🍁 2.3 牛頓法和擬牛頓法的算法公式實(shí)現(xiàn)?

牛頓法和擬牛頓法的具體算法公式可以通過數(shù)學(xué)推導(dǎo)得到,下面是它們的算法公式實(shí)現(xiàn):

  1. 牛頓法的算法公式:

    輸入: 目標(biāo)函數(shù) f ( x ) f(x) f(x),梯度函數(shù) g ( x ) g(x) g(x),海森矩陣函數(shù) H ( x ) H(x) H(x),初始點(diǎn) x 0 x_0 x0?,迭代停止準(zhǔn)則(如梯度大小或迭代次數(shù))

    Repeat 直到滿足停止準(zhǔn)則:

    1. 計(jì)算梯度: g k = g ( x k ) g_k = g(x_k) gk?=g(xk?)
    2. 計(jì)算海森矩陣: H k = H ( x k ) H_k = H(x_k) Hk?=H(xk?)
    3. 求解線性方程組: H k Δ x = ? g k H_k \Delta x = -g_k Hk?Δx=?gk?,找到搜索方向 Δ x \Delta x Δx
    4. 選擇合適的步長(zhǎng) α \alpha α,更新參數(shù): x k + 1 = x k + α Δ x x_{k+1} = x_k + \alpha \Delta x xk+1?=xk?+αΔx

返回參數(shù) x ? x^* x?

在實(shí)現(xiàn)中需要注意,解線性方程組的方法可以選擇使用直接求解方法(如LU分解、Cholesky分解)或迭代方法(如共軛梯度法)。

  1. 擬牛頓法的算法公式:

    輸入: 目標(biāo)函數(shù) f ( x ) f(x) f(x),梯度函數(shù) g ( x ) g(x) g(x),初始點(diǎn) x 0 x_0 x0?,迭代停止準(zhǔn)則,初始的近似海森矩陣 B 0 B_0 B0?

    Repeat 直到滿足停止準(zhǔn)則:

    1. 計(jì)算梯度: g k = g ( x k ) g_k = g(x_k) gk?=g(xk?)
    2. 求解線性方程組: B k Δ x = ? g k B_k \Delta x = -g_k Bk?Δx=?gk?,找到搜索方向 Δ x \Delta x Δx
    3. 選擇合適的步長(zhǎng) α \alpha α,更新參數(shù): x k + 1 = x k + α Δ x x_{k+1} = x_k + \alpha \Delta x xk+1?=xk?+αΔx
    4. 計(jì)算新迭代點(diǎn)的梯度: g k + 1 = g ( x k + 1 ) g_{k+1} = g(x_{k+1}) gk+1?=g(xk+1?)
    5. 更新近似海森矩陣 B k B_k Bk? 的方法(如DFP、BFGS等)

返回參數(shù) x ? x^* x?

在實(shí)現(xiàn)擬牛頓法時(shí),需要選擇合適的近似海森矩陣更新方法,常用的方法有DFP、BFGS、SR1(Symmetric Rank-One)等。

下面是使用Python實(shí)現(xiàn)牛頓法和擬牛頓法的示例代碼:

  1. 牛頓法的Python實(shí)現(xiàn):

    import numpy as npdef newton_method(f, df, d2f, x0, epsilon=1e-6, max_iter=100):x = x0for _ in range(max_iter):g = df(x)H = d2f(x)dx = -np.linalg.solve(H, g)x += dxif np.linalg.norm(dx) < epsilon:breakreturn x# 示例函數(shù)
    def f(x):return x**2 + 2*x + 1# 示例函數(shù)的一階導(dǎo)數(shù)
    def df(x):return 2*x + 2# 示例函數(shù)的二階導(dǎo)數(shù)
    def d2f(x):return 2# 使用牛頓法求解最小值點(diǎn)
    x0 = 0  # 初始點(diǎn)
    x_min = newton_method(f, df, d2f, x0)
    print("最小值點(diǎn):", x_min)
    print("最小值:", f(x_min))
    
  2. 擬牛頓法的Python實(shí)現(xiàn)(以BFGS方法為例):

    import numpy as npdef bfgs_method(f, df, x0, epsilon=1e-6, max_iter=100):n = x0.shape[0]B = np.eye(n)  # 初始的近似海森矩陣x = x0for _ in range(max_iter):g = df(x)dx = -np.linalg.solve(B, g)  # 求解搜索方向alpha = line_search(f, df, x, dx)  # 步長(zhǎng)選擇方法(這里假設(shè)有個(gè)line_search函數(shù))x_new = x + alpha*dxg_new = df(x_new)s = x_new - xy = g_new - grho = 1 / np.dot(y, s)B = (np.eye(n) - rho * np.outer(s, y)) @ B @ (np.eye(n) - rho * np.outer(y, s)) + rho*np.outer(s, s)x = x_newif np.linalg.norm(alpha*dx) < epsilon:breakreturn x# 示例函數(shù)和一階導(dǎo)函數(shù)同上# 使用BFGS擬牛頓法求解最小值點(diǎn)
    x0 = np.array([0, 0])  # 初始點(diǎn)
    x_min = bfgs_method(f, df, x0)
    print("最小值點(diǎn):", x_min)
    print("最小值:", f(x_min))
    

這兩個(gè)示例代碼是簡(jiǎn)化的實(shí)現(xiàn),僅適用于特定的目標(biāo)函數(shù)和問題。在實(shí)際應(yīng)用中,需要根據(jù)具體問題進(jìn)行調(diào)整和改進(jìn),例如適當(dāng)修改迭代停止準(zhǔn)則、步長(zhǎng)選擇方法等。同時(shí),可以使用更高效的數(shù)值計(jì)算庫(kù)(如NumPy)和線性方程組求解方法(如SciPy庫(kù)的scipy.linalg.solve)來提高計(jì)算效率。

🍁🍁 03. 共軛梯度法(Conjugate Gradient)

🍁 3.1 什么是共軛梯度法?

共軛梯度法是一種迭代方法,它可以更快地收斂于二次型損失函數(shù)。如果邏輯回歸的損失函數(shù)是二次型,共軛梯度法是一種高效且可行的優(yōu)化算法。

🍁 3.2 共軛梯度法的具體步驟和算法公式?

共軛梯度法(Conjugate Gradient Method)是一種用于解決線性方程組的迭代方法,它也可以被用于求解無約束最優(yōu)化問題。這里給出共軛梯度法在求解無約束最優(yōu)化問題時(shí)的步驟和算法公式:

假設(shè)我們要求解無約束最優(yōu)化問題 min ? f ( x ) \min \, f(x) minf(x),其中 f ( x ) f(x) f(x) 是目標(biāo)函數(shù)。令 x ? x^* x? 是最小值點(diǎn)。

  1. 初始化:選擇初始點(diǎn) x 0 x_0 x0?,計(jì)算梯度 g 0 = ? f ( x 0 ) g_0 = \nabla f(x_0) g0?=?f(x0?),初始化搜索方向 d 0 = ? g 0 d_0 = -g_0 d0?=?g0?,迭代初始點(diǎn)索引 k = 0 k = 0 k=0

  2. 搜索步長(zhǎng):選擇一個(gè)合適的步長(zhǎng) α k \alpha_k αk?,例如通過線搜索方法(比如Armijo線搜索、Wolfe線搜索等)。

  3. 更新參數(shù):更新參數(shù) x k + 1 = x k + α k d k x_{k+1} = x_k + \alpha_k d_k xk+1?=xk?+αk?dk?。

  4. 計(jì)算梯度:計(jì)算新的梯度 g k + 1 = ? f ( x k + 1 ) g_{k+1} = \nabla f(x_{k+1}) gk+1?=?f(xk+1?)。

  5. 檢查終止準(zhǔn)則:如果滿足終止準(zhǔn)則(如梯度大小小于給定的閾值或達(dá)到最大迭代次數(shù)),則終止迭代,返回最小值點(diǎn) x ? x^* x?。否則,繼續(xù)下面的步驟。

  6. 計(jì)算步長(zhǎng)系數(shù) β k \beta_k βk? β k = ∥ g k + 1 ∥ 2 ∥ g k ∥ 2 \beta_k = \frac{{\|g_{k+1}\|^2}}{{\|g_{k}\|^2}} βk?=gk?2gk+1?2?。

  7. 更新搜索方向:更新搜索方向 d k + 1 = ? g k + 1 + β k d k d_{k+1} = -g_{k+1} + \beta_k d_k dk+1?=?gk+1?+βk?dk?。

  8. 增加迭代次數(shù): k = k + 1 k = k + 1 k=k+1。

  9. 轉(zhuǎn)到步驟 2。

在每次迭代中,共軛梯度法利用之前的搜索方向的信息,以更高效地搜索最小值點(diǎn)。在第 k k k 步迭代中, d k d_k dk? 是在 k k k-1 步迭代后找到的收斂共軛搜索方向。

需要注意的是,共軛梯度法通常用于求解大規(guī)模線性方程組或凸二次規(guī)劃問題,其中線性方程組的系數(shù)矩陣是對(duì)稱正定的。對(duì)于一般的非線性最優(yōu)化問題,可以采用共軛梯度法的變種(如共軛梯度法和擬牛頓法的結(jié)合)來加速收斂。

請(qǐng)注意,共軛梯度法的具體實(shí)現(xiàn)可能會(huì)因應(yīng)用和問題的不同而有所調(diào)整和改進(jìn),例如使用合適的線搜索方法和收斂準(zhǔn)則。同時(shí),可以使用高效的數(shù)值計(jì)算庫(kù)(如NumPy)和線性方程組求解方法(如SciPy庫(kù)的scipy.linalg.solve)來提高計(jì)算效率。

🍁 3.3 共軛梯度法的算法公式實(shí)現(xiàn)?

以下是共軛梯度法的算法公式實(shí)現(xiàn),以求解線性方程組為例:

輸入: 對(duì)稱正定矩陣 A A A,向量 b b b 輸出: 近似解 x x x

  1. 初始化:選擇初始點(diǎn) x 0 x_0 x0?,計(jì)算初始?xì)埐? r 0 = b ? A x 0 r_0 = b - A x_0 r0?=b?Ax0?,初始化搜索方向 d 0 = r 0 d_0 = r_0 d0?=r0?,設(shè)定迭代初始點(diǎn)索引 k = 0 k = 0 k=0。

  2. 迭代更新:對(duì)于 k = 0 , 1 , 2 , … k = 0, 1, 2, \dots k=0,1,2,,執(zhí)行以下步驟:

    2.1. 計(jì)算步長(zhǎng): α k = r k T r k d k T A d k \alpha_k = \frac{{r_k^T r_k}}{{d_k^T A d_k}} αk?=dkT?Adk?rkT?rk??。

    2.2. 更新參數(shù): x k + 1 = x k + α k d k x_{k+1} = x_k + \alpha_k d_k xk+1?=xk?+αk?dk?。

    2.3. 計(jì)算殘差: r k + 1 = b ? A x k + 1 r_{k+1} = b - A x_{k+1} rk+1?=b?Axk+1?。

    2.4. 檢查終止準(zhǔn)則:若滿足終止準(zhǔn)則(如殘差大小小于給定的閾值或達(dá)到最大迭代次數(shù)),則終止迭代,返回近似解 x x x

    2.5. 計(jì)算步長(zhǎng)系數(shù): β k = r k + 1 T r k + 1 r k T r k \beta_k = \frac{{r_{k+1}^T r_{k+1}}}{{r_k^T r_k}} βk?=rkT?rk?rk+1T?rk+1??。

    2.6. 更新搜索方向: d k + 1 = r k + 1 + β k d k d_{k+1} = r_{k+1} + \beta_k d_k dk+1?=rk+1?+βk?dk?

    2.7. 增加迭代次數(shù): k = k + 1 k = k + 1 k=k+1。

    2.8. 轉(zhuǎn)到步驟 2.1。

在每次迭代中,共軛梯度法利用了之前的搜索方向的信息,以更高效地搜索最小值點(diǎn)。在第 k k k 步迭代中, d k d_k dk? 是在 k k k-1 步迭代后找到的收斂共軛搜索方向。

需要注意的是,共軛梯度法的實(shí)現(xiàn)還需要考慮一些細(xì)節(jié),例如選擇合適的初始點(diǎn)、終止準(zhǔn)則的選擇、計(jì)算過程中的數(shù)值穩(wěn)定性等。此外,在實(shí)際應(yīng)用中,通常會(huì)使用數(shù)值計(jì)算庫(kù)提供的高效線性方程組求解方法(如Cholesky分解、共軛梯度法等)來加速計(jì)算過程。

以上提供的是共軛梯度法的基本算法公式實(shí)現(xiàn),具體的實(shí)現(xiàn)方式可以根據(jù)不同的編程語(yǔ)言和數(shù)值計(jì)算庫(kù)進(jìn)行相應(yīng)的調(diào)整和優(yōu)化。

下面是使用 Python 實(shí)現(xiàn)共軛梯度法求解線性方程組的示例代碼:

import numpy as npdef conjugate_gradient(A, b, x0, max_iter=1000, tol=1e-6):"""使用共軛梯度法求解線性方程組 Ax = b,其中 A 是對(duì)稱正定矩陣。:param A: 對(duì)稱正定矩陣:param b: 右側(cè)向量:param x0: 初始點(diǎn):param max_iter: 最大迭代次數(shù):param tol: 迭代終止的殘差閾值:return: 近似解 x"""x = x0r = b - np.dot(A, x)d = rdelta = np.dot(r, r)for i in range(max_iter):q = np.dot(A, d)alpha = delta / np.dot(d, q)x = x + alpha * dr_new = r - alpha * qdelta_new = np.dot(r_new, r_new)if np.sqrt(delta_new) < tol:breakbeta = delta_new / deltad = r_new + beta * dr = r_newdelta = delta_newreturn x

其中,輸入?yún)?shù) A 和 b 分別為線性方程組的系數(shù)矩陣和右側(cè)向量,x0 為初始點(diǎn),max_iter 為最大迭代次數(shù),tol 為迭代終止的殘差閾值。對(duì)于大規(guī)模的線性方程組,可以采用稀疏矩陣進(jìn)行存儲(chǔ)和計(jì)算,以提高計(jì)算效率。

下面給出一個(gè)示例用例:

# 構(gòu)造一個(gè)對(duì)稱正定矩陣 A 和右側(cè)向量 b
n = 100
A = np.random.randn(n, n)
A = np.dot(A.T, A)
b = np.random.randn(n)# 使用初始化為零的向量作為初始點(diǎn)
x0 = np.zeros(n)# 調(diào)用共軛梯度法函數(shù)求解線性方程組 Ax = b
x = conjugate_gradient(A, b, x0)# 輸出近似解 x
print("近似解 x =", x)

注意,對(duì)于一般的非線性最優(yōu)化問題,需要結(jié)合共軛梯度法和其他優(yōu)化方法,例如牛頓法、擬牛頓法、共軛梯度法和擬牛頓法的結(jié)合等。此外,在實(shí)際應(yīng)用中需要對(duì)算法進(jìn)行調(diào)整和優(yōu)化,例如選擇合適的終止條件、計(jì)算過程中的數(shù)值穩(wěn)定性等。

🍁🍁 04. 改進(jìn)的隨機(jī)梯度下降法(Improved Stochastic Gradient Descent)

🍁 4.1 什么是改進(jìn)的隨機(jī)梯度下降法?

針對(duì)隨機(jī)梯度下降法的一些缺點(diǎn),如收斂速度較慢、參數(shù)更新不穩(wěn)定等問題,已經(jīng)提出了很多改進(jìn)的隨機(jī)梯度下降算法。例如,AdaGrad、RMSprop、Adam等算法可以自適應(yīng)地調(diào)整學(xué)習(xí)率。

🍁🍁 05. Adagrad(自適應(yīng)梯度算法)

🍁 5.1 什么是 Adagrad?

Adagrad是一種自適應(yīng)學(xué)習(xí)率算法,它根據(jù)參數(shù)的歷史梯度進(jìn)行自適應(yīng)的學(xué)習(xí)率調(diào)整。它對(duì)于稀疏特征的處理效果較好,能夠有效地進(jìn)行模型訓(xùn)練。

🍁 5.2 RMSprop(均方根傳播)的具體步驟和算法公式?

RMSProp(均方根傳播)是一種基于梯度的自適應(yīng)學(xué)習(xí)率算法,它可以根據(jù)每個(gè)參數(shù)的歷史梯度大小來自適應(yīng)地調(diào)整學(xué)習(xí)率。以下是RMSProp算法的具體步驟和算法公式:

輸入:學(xué)習(xí)率 α \alpha α,初始參數(shù) w w w,目標(biāo)函數(shù)的梯度函數(shù) ? f ( w ) \nabla f(w) ?f(w),衰減因子 ρ \rho ρ,常數(shù) ? \epsilon ?。 輸出:參數(shù)的最優(yōu)解 w ? w^\star w?。

  1. 初始化:初始參數(shù) w w w,初始平方梯度和 r = 0 r = 0 r=0,迭代次數(shù) t = 0 t = 0 t=0。

  2. 迭代更新:對(duì)于每個(gè)迭代 t t t,執(zhí)行以下步驟:

    2.1. 計(jì)算當(dāng)前迭代的梯度 ? t = ? f ( w t ) \nabla_t = \nabla f(w_t) ?t?=?f(wt?)。

    2.2. 計(jì)算平方梯度和的衰減平均: r = ρ r + ( 1 ? ρ ) ? t ⊙ ? t r = \rho r + (1 - \rho) \nabla_t \odot \nabla_t r=ρr+(1?ρ)?t??t? ⊙ \odot 表示按元素相乘)。

    2.3. 調(diào)整學(xué)習(xí)率: η t = α r + ? \eta_t = \frac{\alpha}{\sqrt{r + \epsilon}} ηt?=r+? ?α?

    2.4. 更新參數(shù): w t + 1 = w t ? η t ⊙ ? t w_{t+1} = w_t - \eta_t \odot \nabla_t wt+1?=wt??ηt??t?。

    2.5. 增加迭代次數(shù): t = t + 1 t = t + 1 t=t+1

  3. 終止準(zhǔn)則:根據(jù)預(yù)設(shè)的終止準(zhǔn)則(如達(dá)到最大迭代次數(shù)或梯度變化小于閾值)決定是否停止迭代。若終止迭代,則輸出最優(yōu)解 w ? w^\star w?;否則,返回步驟 2。

RMSProp算法與Adagrad算法都是自適應(yīng)學(xué)習(xí)率算法,但是RMSProp算法引入了衰減平均的概念,可以緩解學(xué)習(xí)率急劇下降的問題。在RMSProp算法中,參數(shù)的梯度平方和會(huì)通過衰減平均進(jìn)行平滑,以消除梯度信息的噪聲影響,同時(shí)計(jì)算出的學(xué)習(xí)率也會(huì)相應(yīng)地變得更加平滑和穩(wěn)定,提高了優(yōu)化的性能。

需要注意的是,RMSProp算法和Adagrad算法類似,都需要對(duì)目標(biāo)函數(shù)進(jìn)行偏導(dǎo)數(shù)求解,并根據(jù)求解結(jié)果生成梯度函數(shù)。在實(shí)踐應(yīng)用中,還需要對(duì)RMSProp算法進(jìn)行調(diào)參和優(yōu)化,例如選擇合適的學(xué)習(xí)率和衰減因子,常數(shù) ? \epsilon ? 的取值,初始參數(shù),終止條件等,以提高算法的效率和魯棒性。

🍁 5.3 RMSprop(均方根傳播)的算法公式實(shí)現(xiàn)?

下面是使用 Python 實(shí)現(xiàn) RMSProp 算法的示例代碼:

import numpy as npdef rmsprop(grad_func, init_theta, alpha=0.01, rho=0.9, eps=1e-8, max_iters=1000, tol=1e-6):"""使用 RMSProp 算法求解無約束優(yōu)化問題:min f(theta),其中 grad_func 是目標(biāo)函數(shù)的梯度函數(shù)。:param grad_func: 目標(biāo)函數(shù)的梯度函數(shù):param init_theta: 參數(shù)的初始值:param alpha: 初始學(xué)習(xí)率:param rho: 平方梯度和的衰減因子:param eps: 避免除零錯(cuò)誤的小常數(shù):param max_iters: 最大迭代次數(shù):param tol: 最小收斂差:return: 近似最優(yōu)解 theta"""theta = init_thetagrad_squared_sum = np.zeros_like(init_theta)for i in range(max_iters):grad = grad_func(theta)grad_squared_sum = rho * grad_squared_sum + (1 - rho) * grad ** 2learning_rate = alpha / (np.sqrt(grad_squared_sum) + eps)theta_new = theta - learning_rate * gradif np.linalg.norm(theta_new - theta) < tol:breaktheta = theta_newreturn theta

其中,輸入?yún)?shù) grad_func 是目標(biāo)函數(shù)的梯度函數(shù)(形如 grad_func(theta),返回 theta 點(diǎn)處的梯度),init_theta 是參數(shù)的初始值,alpha 是初始學(xué)習(xí)率,rho 是平方梯度和的衰減因子,eps 是避免除零錯(cuò)誤的小常數(shù),max_iters 是最大迭代次數(shù),tol 是最小收斂差。輸出參數(shù)為近似最優(yōu)解 theta。

需要注意的是,目標(biāo)函數(shù)的梯度函數(shù)應(yīng)滿足一定的可導(dǎo)性和連續(xù)性條件,否則求解過程可能出現(xiàn)問題。此外,在實(shí)踐應(yīng)用中,需要對(duì) RMSProp 算法進(jìn)行調(diào)參和優(yōu)化,例如選擇合適的學(xué)習(xí)率、衰減因子、常數(shù) ? \epsilon ? 的取值、初始參數(shù)、終止條件等,以提高算法的表現(xiàn)和效率。

🍁🍁 06. RMSprop(均方根傳播)

🍁 6.1 什么是RMSprop?

RMSprop是一種自適應(yīng)學(xué)習(xí)率算法,它通過利用參數(shù)梯度的移動(dòng)平均值來調(diào)整學(xué)習(xí)率。它可以自動(dòng)調(diào)整學(xué)習(xí)率的大小,從而在不同特征上進(jìn)行合理的更新。

🍁 6.2 Adam(自適應(yīng)矩估計(jì))的具體步驟和算法公式?

Adam(自適應(yīng)矩估計(jì))是一種基于梯度的自適應(yīng)學(xué)習(xí)率算法,它采用梯度的一階矩估計(jì)和二階矩估計(jì)自適應(yīng)地調(diào)整學(xué)習(xí)率。以下是Adam算法的具體步驟和算法公式:

輸入:學(xué)習(xí)率 α \alpha α,初始參數(shù) w w w,目標(biāo)函數(shù)的梯度函數(shù) ? f ( w ) \nabla f(w) ?f(w),一階矩估計(jì)的衰減因子 β 1 \beta_1 β1?,二階矩估計(jì)的衰減因子 β 2 \beta_2 β2?,常數(shù) ? \epsilon ?。 輸出:參數(shù)的最優(yōu)解 w ? w^\star w?。

  1. 初始化:初始參數(shù) w w w,一階矩估計(jì) m 0 = 0 \mathbf{m}_0 = 0 m0?=0,二階矩估計(jì) v 0 = 0 \mathbf{v}_0 = 0 v0?=0,迭代次數(shù) t = 0 t = 0 t=0。

  2. 迭代更新:對(duì)于每個(gè)迭代 t t t,執(zhí)行以下步驟:

    2.1. 計(jì)算當(dāng)前迭代的梯度 ? t = ? f ( w t ) \nabla_t = \nabla f(w_t) ?t?=?f(wt?)。

    2.2. 更新一階矩估計(jì): m t = β 1 m t ? 1 + ( 1 ? β 1 ) ? t \mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1 - \beta_1) \nabla_t mt?=β1?mt?1?+(1?β1?)?t?。

    2.3. 更新二階矩估計(jì): v t = β 2 v t ? 1 + ( 1 ? β 2 ) ? t 2 \mathbf{v}_t = \beta_2 \mathbf{v}_{t-1} + (1 - \beta_2) \nabla_t^2 vt?=β2?vt?1?+(1?β2?)?t2?。

    2.4. 校正一階矩估計(jì)的偏差: m ^ t = m t 1 ? β 1 t \hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1 - \beta_1^t} m^t?=1?β1t?mt??

    2.5. 校正二階矩估計(jì)的偏差: v ^ t = v t 1 ? β 2 t \hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1 - \beta_2^t} v^t?=1?β2t?vt??。

    2.6. 計(jì)算學(xué)習(xí)率調(diào)整量: Δ w t = α m ^ t v ^ t + ? \Delta w_t = \frac{\alpha \hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon} Δwt?=v^t? ?+?αm^t??。

    2.7. 更新參數(shù): w t + 1 = w t ? Δ w t w_{t+1} = w_t - \Delta w_t wt+1?=wt??Δwt?。

    2.8. 增加迭代次數(shù): t = t + 1 t = t + 1 t=t+1。

  3. 終止準(zhǔn)則:根據(jù)預(yù)設(shè)的終止準(zhǔn)則(如達(dá)到最大迭代次數(shù)或梯度變化小于閾值)決定是否停止迭代。若終止迭代,則輸出最優(yōu)解 w ? w^\star w?;否則,返回步驟 2。

Adam算法的核心思想在于利用梯度的一階矩估計(jì)和二階矩估計(jì)對(duì)學(xué)習(xí)率進(jìn)行自適應(yīng)調(diào)整,同時(shí)通過校正偏差來提高精度。具體來說,Adam算法使用一階矩估計(jì) m t \mathbf{m}_t mt? 來估計(jì)梯度的均值,用二階矩估計(jì) v t \mathbf{v}_t vt? 來估計(jì)梯度的方差(即均方差) ,然后結(jié)合這兩個(gè)估計(jì)量來自適應(yīng)地調(diào)整學(xué)習(xí)率。在實(shí)踐應(yīng)用中,還需要對(duì)Adam算法進(jìn)行調(diào)參和優(yōu)化,例如選擇合適的衰減因子 β 1 \beta_1 β1? β 2 \beta_2 β2?,常數(shù) ? \epsilon ? 的取值,初始參數(shù),終止條件等,以提高算法的效率和魯棒性。

需要注意的是,和RMSProp算法、Adagrad算法一樣,Adam算法都需要對(duì)目標(biāo)函數(shù)進(jìn)行偏導(dǎo)數(shù)求解,并根據(jù)求解

🍁 6.3 Adam(自適應(yīng)矩估計(jì))的算法公式實(shí)現(xiàn)?

下面是Adam算法的具體實(shí)現(xiàn),包括算法公式和偽代碼:

算法公式:
在這里插入圖片描述

偽代碼:

輸入:學(xué)習(xí)率 alpha, 初始參數(shù) w, 目標(biāo)函數(shù)的梯度函數(shù) grad_f(w), 一階矩估計(jì)的衰減因子 beta1, 二階矩估計(jì)的衰減因子 beta2, 常數(shù) epsilon
輸出:參數(shù)的最優(yōu)解 w_star初始化:初始參數(shù) w, 一階矩估計(jì) m_0 = 0, 二階矩估計(jì) v_0 = 0, 迭代次數(shù) t = 0while 沒有達(dá)到終止準(zhǔn)則 dot = t + 1當(dāng)前迭代的梯度 grad_t = grad_f(w)更新一階矩估計(jì):m_t = beta1 * m_{t-1} + (1 - beta1) * grad_t更新二階矩估計(jì):v_t = beta2 * v_{t-1} + (1 - beta2) * grad_t^2校正一階矩估計(jì)的偏差:m_hat_t = m_t / (1 - beta1^t)校正二階矩估計(jì)的偏差:v_hat_t = v_t / (1 - beta2^t)計(jì)算學(xué)習(xí)率調(diào)整量:delta_w_t = alpha * m_hat_t / (sqrt(v_hat_t) + epsilon)更新參數(shù):w = w - delta_w_t返回參數(shù)的最優(yōu)解 w_star

希望這個(gè)實(shí)現(xiàn)可以幫助到你!請(qǐng)注意,這只是一個(gè)粗略的偽代碼示例,具體的實(shí)現(xiàn)可能會(huì)因編程語(yǔ)言和應(yīng)用環(huán)境而有所不同。在實(shí)際使用Adam算法時(shí),還需要進(jìn)行一些調(diào)參和優(yōu)化來提高算法的性能和收斂速度。

🍁🍁 07. Adam(自適應(yīng)矩估計(jì))

🍁 7.1 什么是 Adam?

Adam是一種融合了Momentum和RMSprop的自適應(yīng)學(xué)習(xí)率算法。Adam算法具有較好的適應(yīng)性和魯棒性,能夠在訓(xùn)練過程中自動(dòng)調(diào)整學(xué)習(xí)率和動(dòng)量。

🍁 7.2 Adam的具體步驟和算法公式?

Adam是一種自適應(yīng)學(xué)習(xí)率方法,可以用于優(yōu)化神經(jīng)網(wǎng)絡(luò)的權(quán)重,在深度學(xué)習(xí)領(lǐng)域被廣泛使用。它結(jié)合了RMSProp和Momentum的優(yōu)點(diǎn),能夠在不同維度自適應(yīng)地調(diào)整學(xué)習(xí)率,并對(duì)梯度的歷史信息進(jìn)行加權(quán)平均,從而更加準(zhǔn)確地更新模型參數(shù)。Adam是一種基于梯度的優(yōu)化算法,可以通過計(jì)算梯度的一階矩和二階矩估計(jì)來更新模型的參數(shù),其具體步驟如下:

  1. 初始化參數(shù):學(xué)習(xí)率 α \alpha α,動(dòng)量參數(shù) β 1 \beta_1 β1?,二階動(dòng)量衰減率 β 2 \beta_2 β2?,初始一階矩和二階矩 m 0 m_0 m0? v 0 v_0 v0?,一般情況下, m 0 m_0 m0? v 0 v_0 v0? 初始化為0。
  2. 在每次迭代中,通過反向傳播計(jì)算損失函數(shù)的梯度 g t g_t gt?。
  3. 計(jì)算梯度的一階矩 m t m_t mt? 和二階矩 v t v_t vt?
    m t = β 1 m t ? 1 + ( 1 ? β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t mt?=β1?mt?1?+(1?β1?)gt?
    v t = β 2 v t ? 1 + ( 1 ? β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 vt?=β2?vt?1?+(1?β2?)gt2?
  4. 對(duì)一階和二階矩進(jìn)行偏差修正,從而減輕因初始化而引入的偏差:
    m ^ t = m t 1 ? β 1 t \hat{m}_t = \frac{m_t}{1-\beta_1^t} m^t?=1?β1t?mt??
    v ^ t = v t 1 ? β 2 t \hat{v}_t = \frac{v_t}{1-\beta_2^t} v^t?=1?β2t?vt??
  5. 使用修正后的 m t m_t mt? v t v_t vt?,以及超參數(shù) α \alpha α ? \epsilon ? 更新參數(shù):
    Δ θ t = ? α v ^ t + ? m ^ t \Delta\theta_t = -\frac{\alpha}{\sqrt{\hat{v}_t}+\epsilon} \hat{m}_t Δθt?=?v^t? ?+?α?m^t?
    θ t = θ t ? 1 + Δ θ t \theta_t = \theta_{t-1} + \Delta\theta_t θt?=θt?1?+Δθt?

其中, t t t 表示迭代的次數(shù), θ \theta θ 是需要進(jìn)行優(yōu)化的參數(shù), α \alpha α 是學(xué)習(xí)率, β 1 \beta_1 β1? β 2 \beta_2 β2? 是動(dòng)量系數(shù), ? \epsilon ? 是一個(gè)很小的數(shù),以防分母過小。

需要注意的是,Adam算法的偏差校正非常重要,可以提高算法的性能和收斂速度。在Adam算法中, m ^ t \hat{m}_t m^t? v ^ t \hat{v}_t v^t? 是在更新權(quán)重時(shí)對(duì)動(dòng)量和縮放系數(shù)進(jìn)行校正的項(xiàng)。

上述公式中 Δ θ \Delta\theta Δθ 表示需要更新的參數(shù)變化量,即實(shí)現(xiàn)時(shí)需要將 θ \theta θ 增加 Δ θ \Delta\theta Δθ 才能更新參數(shù)。

下面是Adam算法的數(shù)學(xué)公式表示:

  • 初始化:

    m 0 = 0 m_0 = 0 m0?=0
    v 0 = 0 v_0 = 0 v0?=0
    β 1 = 0.9 \beta_1 = 0.9 β1?=0.9
    β 2 = 0.999 \beta_2 = 0.999 β2?=0.999
    α = 0.001 \alpha = 0.001 α=0.001
    ? = 1 0 ? 8 \epsilon = 10^{-8} ?=10?8

  • 對(duì)于 t = 1, 2, …,執(zhí)行以下更新:

    計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度: g t = ? θ J ( θ t ? 1 ) g_t = \nabla_{\theta} J(\theta_{t-1}) gt?=?θ?J(θt?1?)
    更新梯度一階矩估計(jì): m t = β 1 m t ? 1 + ( 1 ? β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t mt?=β1?mt?1?+(1?β1?)gt?
    更新梯度二階矩估計(jì): v t = β 2 v t ? 1 + ( 1 ? β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 vt?=β2?vt?1?+(1?β2?)gt2?
    偏差校正后的一階矩估計(jì): m ^ t = m t 1 ? β 1 t \hat{m}_t = \frac{m_t}{1-\beta_1^t} m^t?=1?β1t?mt??
    偏差校正后的二階矩估計(jì)

🍁 7.3 Adam的算法公式實(shí)現(xiàn)?

以下是使用Python實(shí)現(xiàn)Adam算法的代碼示例:

import numpy as npdef adam_optimizer(grad, m, v, beta1, beta2, alpha, epsilon, t):# 更新梯度一階矩估計(jì)m = beta1 * m + (1 - beta1) * grad# 更新梯度二階矩估計(jì)v = beta2 * v + (1 - beta2) * (grad ** 2)# 偏差校正后的一階矩估計(jì)m_hat = m / (1 - beta1**t)# 偏差校正后的二階矩估計(jì)v_hat = v / (1 - beta2**t)# 更新參數(shù)param = - alpha * m_hat / (np.sqrt(v_hat) + epsilon)return param, m, v# 初始化參數(shù)
alpha = 0.001  # 學(xué)習(xí)率
beta1 = 0.9  # 一階矩估計(jì)衰減率
beta2 = 0.999  # 二階矩估計(jì)衰減率
epsilon = 1e-8  # 平滑項(xiàng)
t = 0  # 迭代次數(shù)
m = np.zeros_like(params)  # 梯度一階矩估計(jì)
v = np.zeros_like(params)  # 梯度二階矩估計(jì)# 在每個(gè)迭代步驟中使用Adam算法更新參數(shù)
while stopping_criteria:t += 1# 計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度grad = compute_gradient(params)# 更新參數(shù)param_update, m, v = adam_optimizer(grad, m, v, beta1, beta2, alpha, epsilon, t)params += param_update

上述代碼中,grad表示損失函數(shù)對(duì)模型參數(shù)的梯度,m表示梯度一階矩估計(jì),v表示梯度二階矩估計(jì),beta1表示一階矩估計(jì)衰減率,beta2表示二階矩估計(jì)衰減率,alpha表示學(xué)習(xí)率,epsilon表示平滑項(xiàng),t表示當(dāng)前的迭代次數(shù),param表示更新后的模型參數(shù)。

需要注意的是,根據(jù)具體的優(yōu)化問題,可能需要根據(jù)經(jīng)驗(yàn)來調(diào)整學(xué)習(xí)率和各個(gè)衰減率的取值,以獲得更好的優(yōu)化性能。

🍁🍁 08. LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)

🍁 8.1 什么是 LBFGS?

LBFGS是一種擬牛頓法的變種,它使用有限內(nèi)存來近似計(jì)算海森矩陣的逆。LBFGS方法在邏輯回歸中通常用于處理大規(guī)模數(shù)據(jù)集。

🍁 8.2 LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)的具體步驟和算法公式?

LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)是一種常用的無約束優(yōu)化算法,包含近似Hessian矩陣的求解過程。下面是LBFGS的具體步驟和算法公式:

步驟:

  1. 初始化參數(shù):選擇初始參數(shù) x 0 x_0 x0?、初始Hessian估計(jì) H 0 H_0 H0?、初始步長(zhǎng) α 0 \alpha_0 α0?,設(shè)定迭代次數(shù)上限等。

  2. 進(jìn)入迭代循環(huán):

    • 計(jì)算梯度:計(jì)算當(dāng)前參數(shù)點(diǎn)處的梯度 g k = ? f ( x k ) g_k = \nabla f(x_k) gk?=?f(xk?)。

    • 更新搜索方向:根據(jù)BFGS公式更新搜索方向 d k = ? H k ? g k d_k = -H_k \cdot g_k dk?=?Hk??gk?。

    • 線搜索:在搜索方向上尋找合適的步長(zhǎng) α k \alpha_k αk?,滿足強(qiáng)Wolfe條件或Armijo條件。

    • 更新參數(shù)和梯度差:計(jì)算參數(shù)的更新量 δ x k = α k ? d k \delta x_k = \alpha_k \cdot d_k δxk?=αk??dk?,更新參數(shù) x k + 1 = x k + δ x k x_{k+1} = x_k + \delta x_k xk+1?=xk?+δxk?。

    • 計(jì)算梯度差:計(jì)算參數(shù)的梯度差 δ g k = ? f ( x k + 1 ) ? ? f ( x k ) \delta g_k = \nabla f(x_{k+1}) - \nabla f(x_k) δgk?=?f(xk+1?)??f(xk?)。

    • 更新Hessian估計(jì):根據(jù)LBFGS公式更新Hessian估計(jì) H k + 1 = H k + δ x k δ x k ? δ x k ? δ g k ? H k δ g k δ g k ? H k δ g k ? H k δ g k H_{k+1} = H_k + \frac{\delta x_k \delta x_k^\top}{\delta x_k^\top \delta g_k} - \frac{H_k \delta g_k \delta g_k^\top H_k}{\delta g_k^\top H_k \delta g_k} Hk+1?=Hk?+δxk??δgk?δxk?δxk????δgk??Hk?δgk?Hk?δgk?δgk??Hk??

    • 如果滿足終止準(zhǔn)則(如梯度收斂),則停止迭代。否則,返回第二步。

算法公式:
在這里插入圖片描述

LBFGS算法通過維護(hù)Hessian矩陣的近似來實(shí)現(xiàn)無約束優(yōu)化的迭代過程,并利用近似Hessian矩陣來計(jì)算搜索方向。這種方法在大規(guī)模優(yōu)化問題中非常高效,因?yàn)樗恍枰@式地存儲(chǔ)和計(jì)算完整的Hessian矩陣。同時(shí),LBFGS算法還具有全局收斂性和幾何收斂速度等優(yōu)點(diǎn)。

🍁 8.3 LBFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)的算法公式實(shí)現(xiàn)?

LBFGS算法的具體實(shí)現(xiàn)依賴于編程語(yǔ)言和庫(kù)的實(shí)現(xiàn),下面是一份Python實(shí)現(xiàn)的參考代碼。這里假設(shè)優(yōu)化目標(biāo)是凸函數(shù),并使用Wolfe準(zhǔn)則進(jìn)行線搜索。

import numpy as np
from scipy.optimize import line_searchdef lbfgs(fun, grad, x0, max_iter=500, m=10, eps=1e-5):# 初始化參數(shù)x = x0f, g = fun(x), grad(x)H = np.eye(len(x))s_list = []y_list = []alpha_list = []g_norm = np.linalg.norm(g)for k in range(max_iter):# 終止準(zhǔn)則:如果梯度小于閾值,終止迭代if g_norm < eps:print(f'LBFGS converges in {k} iterations')break# 計(jì)算搜索方向d = -np.linalg.solve(H, g)# 線搜索alpha = line_search(fun, grad, x, d, g, f, c1=1e-4, c2=0.9)alpha_list.append(alpha[0])x = x + alpha[0] * d# 計(jì)算參數(shù)和梯度差f_new, g_new = fun(x), grad(x)s, y = x - s_list[-m], g_new - y_list[-m]rho = 1 / (y @ s)s_list.append(x)y_list.append(g_new)alpha_list.append(alpha[0])# 更新Hessian估計(jì)H_s = H @ s.reshape(-1, 1)H = H - rho * H_s @ y.reshape(1, -1) + rho * (s @ H_s) * np.outer(y, y)g = g_newg_norm = np.linalg.norm(g)# 保持s和y列表長(zhǎng)度為mif len(s_list) > m:s_list.pop(0)y_list.pop(0)return x, f_new

值得注意的是,這份代碼使用了以下幾個(gè)重要的優(yōu)化技巧:

  • 利用線性代數(shù)庫(kù)Numpy中的np.linalg.solve()函數(shù)求解線性方程組,而不是通過矩陣求逆和矩陣乘法的方式計(jì)算搜索方向;
  • 使用Wolfe準(zhǔn)則進(jìn)行線搜索,確保每次搜索都朝著下降的方向;
  • 維護(hù)s、y和alpha列表的長(zhǎng)度為m,避免列表過長(zhǎng)導(dǎo)致內(nèi)存消耗過大。

當(dāng)然,LBFGS算法的實(shí)現(xiàn)還可以進(jìn)一步優(yōu)化,比如實(shí)現(xiàn)各種不同的線搜索準(zhǔn)則、動(dòng)態(tài)調(diào)整m等方法來提升求解的速度和精度。

🍁🍁 09. Adamax

🍁 9.1 什么是 Adamax ?

這是Adam算法的一種變體,它使用L∞范數(shù)替代了Adam中的L2范數(shù),在一些具有稀疏梯度的問題上,Adamax的表現(xiàn)比Adam更好。

🍁 9.2 Adamax的具體步驟和算法公式?

Adamax是一種用于優(yōu)化神經(jīng)網(wǎng)絡(luò)的自適應(yīng)學(xué)習(xí)率算法,它在Adam算法的基礎(chǔ)上,將二階動(dòng)量指數(shù)衰減率 β2替換為無窮范數(shù)動(dòng)量指數(shù)衰減率,即使得 v 變?yōu)?L2 范數(shù)的衰減率 β2 和 L∞ 范數(shù)的衰減率 β∞ 之間的最大值。它不僅克服了Adam在高維優(yōu)化中的性能下降問題,還可以顯著提高高維優(yōu)化的性能。

Adamax算法的具體步驟如下:

  1. 初始化學(xué)習(xí)率α、一階動(dòng)量指數(shù)衰減率β1、β∞和一個(gè)很小的數(shù)ε來增強(qiáng)數(shù)值的穩(wěn)定性。初始化一階矩估計(jì) m 和 v。
  2. 在每個(gè)迭代中,計(jì)算梯度g,然后使用如下公式更新m和v:
    m = β1 * m + (1 - β1) * g
    v = max(β∞ * v, abs(g))
  3. 在更新m后對(duì)其進(jìn)行偏差糾正和清零,并計(jì)算出校正后的m和v:
    mt = m / (1 - β1^t)
    vt = v
  4. 使用Adamax更新參數(shù)θ:
    θ = θ - (α / (1 - β1^t)) * mt / (vt + ε)

公式中,t是迭代次數(shù),Θ是模型參數(shù)。

下面是Adamax算法的數(shù)學(xué)公式表示:

  • 初始化:

    m_0 = 0 # 初始化一階矩估計(jì)為0
    v_0 = 0 # 初始化v為0
    β1 = 0.9 # 一階動(dòng)量指數(shù)衰減率
    β∞ = 0.999 # 無窮范數(shù)動(dòng)量指數(shù)衰減率
    α = 0.001 # 初始學(xué)習(xí)率
    ε = 10e-8 # 用于數(shù)值穩(wěn)定性,通常設(shè)置為很小的值

  • 對(duì)于 t = 1, 2, …,執(zhí)行以下更新:

    計(jì)算梯度:g_t = ▽_θ L(Θ_t)
    更新一階矩估計(jì):m_t = β1 * m_t-1 + (1 - β1) * g_t
    更新二階動(dòng)量估計(jì):v_t = max(β∞ * v_t-1, |g_t|)
    根據(jù)偏差校正計(jì)算校正后的一階矩估計(jì):m_hat_t = m_t / (1 - β1^t)
    計(jì)算更新參數(shù):Θ_t+1 = Θ_t - α / (1 - β1^t) * m_hat_t / (v_t + ε)

Adamax算法與Adam算法非常相似,但將二階動(dòng)量 v 替換為無窮范數(shù)動(dòng)量 v∞,并不需要其偏差校正。公式中,|g|表示給定梯度g的所有元素的絕對(duì)值的向量。

🍁 9.3 Nadam的算法公式實(shí)現(xiàn)?

以下是使用Python實(shí)現(xiàn)Adamax算法的代碼示例:

import numpy as npdef adamax_optimizer(grad, m, v, beta1, beta_inf, alpha, epsilon, t):# 更新梯度一階矩估計(jì)m = beta1 * m + (1 - beta1) * grad# 更新梯度二階動(dòng)量指數(shù)v = np.maximum(beta_inf * v, np.abs(grad))# 偏差校正后的一階矩估計(jì)m_hat = m / (1 - beta1**t)# 更新參數(shù)param = - alpha * m_hat / (v + epsilon)return param, m, v# 初始化參數(shù)
alpha = 0.001  # 學(xué)習(xí)率
beta1 = 0.9  # 一階動(dòng)量指數(shù)衰減率
beta_inf = 0.999  # 無窮范數(shù)動(dòng)量指數(shù)衰減率
epsilon = 1e-8  # 平滑項(xiàng)
t = 0  # 迭代次數(shù)
m = np.zeros_like(params)  # 梯度一階矩估計(jì)
v = np.zeros_like(params)  # 無窮范數(shù)動(dòng)量指數(shù)# 在每個(gè)迭代步驟中使用Adamax算法更新參數(shù)
while stopping_criteria:t += 1# 計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度grad = compute_gradient(params)# 更新參數(shù)param_update, m, v = adamax_optimizer(grad, m, v, beta1, beta_inf, alpha, epsilon, t)params += param_update

上述代碼中,grad表示損失函數(shù)對(duì)模型參數(shù)的梯度,m表示梯度一階矩估計(jì),v表示無窮范數(shù)動(dòng)量指數(shù),beta1表示一階動(dòng)量指數(shù)衰減率,beta_inf表示無窮范數(shù)動(dòng)量指數(shù)衰減率,alpha表示學(xué)習(xí)率,epsilon表示平滑項(xiàng),t表示當(dāng)前的迭代次數(shù),param表示更新后的模型參數(shù)。

需要注意的是,根據(jù)具體的優(yōu)化問題,可能需要根據(jù)經(jīng)驗(yàn)來調(diào)整學(xué)習(xí)率和各個(gè)衰減率的取值,以獲得更好的優(yōu)化性能。

🍁🍁 10. Nadam

🍁 10.1 什么是**Nadam ?

這是一種帶無約束方法的Nesterov動(dòng)量Adam算法,可以非常有效地控制"m"-方向和"v"-方向的耦合,并且通??梢蕴岣逜dam的收斂速度。

🍁 10.2 Nadam的具體步驟和算法公式?

Nadam是一種結(jié)合了Nesterov動(dòng)量和Adam優(yōu)化算法特性的優(yōu)化算法。下面是Nadam的具體步驟和算法公式:

  1. 初始化參數(shù):

    • 學(xué)習(xí)率 α
    • 手動(dòng)動(dòng)量參數(shù) β1(建議為0.9)
    • 二階動(dòng)量指數(shù)衰減率 β2(建議為0.999)
    • 平滑項(xiàng) ε(用于數(shù)值穩(wěn)定性,通常設(shè)置為很小的值,比如1e-8)
  2. 初始化變量:

    • 梯度的一階矩估計(jì) m (初始化為0向量)
    • 梯度的二階矩估計(jì) v (初始化為0向量)
    • 過去動(dòng)量方向的指數(shù)衰減平均 mt (初始化為0向量)
    • 過去二階動(dòng)量方向的指數(shù)衰減平均 vt (初始化為0向量)
  3. 在每次迭代中,執(zhí)行以下步驟:

    • 計(jì)算梯度 g,根據(jù)當(dāng)前參數(shù)計(jì)算損失函數(shù)的導(dǎo)數(shù)
    • 更新一階矩估計(jì):m = β1 * m + (1 - β1) * g
    • 更新二階矩估計(jì):v = β2 * v + (1 - β2) * g2
    • 偏差校正:m_hat = m / (1 - β1^t),v_hat = v / (1 - β2^t)
    • 計(jì)算過去動(dòng)量方向和過去二階動(dòng)量方向的指數(shù)加權(quán)平均: mt = β1 * mt + (1 - β1) * g vt = β2 * vt + (1 - β2) * g2
    • 計(jì)算校正項(xiàng):delta = (1 - β1^t) * mt / ((1 - β1^t) * vt + ε)
    • 根據(jù)Nesterov動(dòng)量公式,更新參數(shù): θ = θ - α * (β1 * delta + (1 - β1) * g) / sqrt((1 - β2^t) * v + ε)

其中,t表示當(dāng)前的迭代次數(shù),θ表示模型參數(shù)。

通過結(jié)合Nesterov動(dòng)量和Adam算法的思想,Nadam相對(duì)于傳統(tǒng)的Adam算法可以更好地控制"m"-方向和"v"-方向的耦合,從而提高收斂速度和優(yōu)化性能。

🍁 10.3 Nadam的算法公式實(shí)現(xiàn)?

Nadam算法的具體實(shí)現(xiàn)公式如下:

首先,初始化參數(shù):

  • 學(xué)習(xí)率 α
  • 手動(dòng)動(dòng)量參數(shù) β1(建議為0.9)
  • 二階動(dòng)量指數(shù)衰減率 β2(建議為0.999)
  • 平滑項(xiàng) ε(用于數(shù)值穩(wěn)定性,通常設(shè)置為很小的值,比如1e-8)

然后,初始化變量:

  • 梯度的一階矩估計(jì) m (初始化為0向量)
  • 梯度的二階矩估計(jì) v (初始化為0向量)
  • 過去動(dòng)量方向的指數(shù)衰減平均 mt (初始化為0向量)
  • 過去二階動(dòng)量方向的指數(shù)衰減平均 vt (初始化為0向量)

在每次迭代中,執(zhí)行以下步驟:

  1. 計(jì)算梯度 g,根據(jù)當(dāng)前參數(shù)計(jì)算損失函數(shù)的導(dǎo)數(shù)
  2. 更新一階矩估計(jì):m = β1 * m + (1 - β1) * g
  3. 更新二階矩估計(jì):v = β2 * v + (1 - β2) * g2
  4. 偏差校正:m_hat = m / (1 - β1^t),v_hat = v / (1 - β2^t)
  5. 計(jì)算過去動(dòng)量方向和過去二階動(dòng)量方向的指數(shù)加權(quán)平均: mt = β1 * mt + (1 - β1) * g vt = β2 * vt + (1 - β2) * g2
  6. 計(jì)算校正項(xiàng):delta = (1 - β1^t) * mt / sqrt((1 - β2^t) * v + ε)
  7. 根據(jù)Nesterov動(dòng)量公式,更新參數(shù): θ = θ - α * (β1 * delta + (1 - β1) * g) / (sqrt(v_hat) + ε)

其中,t表示當(dāng)前的迭代次數(shù),θ表示模型參數(shù)。

這些步驟按照順序執(zhí)行,直到達(dá)到預(yù)定的迭代次數(shù)或達(dá)到其他停止條件。通過這種方式,Nadam算法在優(yōu)化過程中會(huì)自適應(yīng)地調(diào)整學(xué)習(xí)率和動(dòng)量,并結(jié)合Nesterov動(dòng)量的思想來加速收斂并獲得更好的優(yōu)化性能。

以下是用Python實(shí)現(xiàn)Nadam算法的代碼示例:

import numpy as npdef nadam_optimizer(grad, m, v, mt, vt, alpha, beta1, beta2, epsilon, t):# 更新梯度一階矩估計(jì)m = beta1 * m + (1 - beta1) * grad# 更新梯度二階矩估計(jì)v = beta2 * v + (1 - beta2) * grad**2# 計(jì)算偏差校正后的一階和二階矩估計(jì)m_hat = m / (1 - beta1**t)v_hat = v / (1 - beta2**t)# 更新過去動(dòng)量方向和過去二階動(dòng)量方向的指數(shù)加權(quán)平均mt = beta1 * mt + (1 - beta1) * gradvt = beta2 * vt + (1 - beta2) * grad**2# 計(jì)算校正項(xiàng)deltadelta = (1 - beta1**t) * mt / (np.sqrt((1 - beta2**t) * v_hat) + epsilon)# 計(jì)算更新后的參數(shù)param = - alpha * (beta1 * delta + (1 - beta1) * grad) / (np.sqrt(v_hat) + epsilon)return param, m, v, mt, vt

其中,grad表示損失函數(shù)對(duì)模型參數(shù)的梯度,mv是梯度一階和二階矩估計(jì),mtvt是過去動(dòng)量方向和過去二階動(dòng)量方向的指數(shù)加權(quán)平均,alpha是學(xué)習(xí)率,beta1beta2是手動(dòng)動(dòng)量參數(shù)和二階動(dòng)量指數(shù)衰減率,epsilon是平滑項(xiàng),t表示當(dāng)前的迭代次數(shù),param表示更新后的模型參數(shù)。這個(gè)函數(shù)將計(jì)算和返回Nadam算法中的參數(shù)更新公式。

使用上述代碼源自的Nadam函數(shù),只需要首先初始化所需的變量,然后按照迭代次數(shù)循環(huán)調(diào)用Nadam函數(shù)即可。

# 初始化參數(shù)
alpha = 0.001
beta1 = 0.9
beta2 = 0.999
epsilon = 1e-8
t = 0
m = np.zeros_like(params)
v = np.zeros_like(params)
mt = np.zeros_like(params)
vt = np.zeros_like(params)# 在每個(gè)迭代步驟中使用Nadam算法更新參數(shù)
while stopping_criteria:t += 1# 計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度grad = compute_gradient(params)# 更新參數(shù)param_update, m, v, mt, vt = nadam_optimizer(grad, m, v, mt, vt, alpha, beta1, beta2, epsilon, t)params += param_update

在使用Nadam的神經(jīng)網(wǎng)絡(luò)優(yōu)化過程中,我們要根據(jù)網(wǎng)絡(luò)的具體情況來具體設(shè)置這些參數(shù)的值,以充分發(fā)揮Nadam算法的特性。

在這里插入圖片描述

http://www.risenshineclean.com/news/62879.html

相關(guān)文章:

  • 免費(fèi)建設(shè)網(wǎng)站公司哪家好網(wǎng)站百度收錄
  • 個(gè)人網(wǎng)站做博客還是做論壇2023網(wǎng)站seo
  • 深圳網(wǎng)站建設(shè)加盟無錫網(wǎng)絡(luò)公司
  • 網(wǎng)站建設(shè)基地百度推廣員工工資怎么樣
  • 蕪湖做的好的招聘網(wǎng)站百度seo在哪里
  • 響應(yīng)式網(wǎng)站制作軟件網(wǎng)上怎么推廣產(chǎn)品
  • 自己做的網(wǎng)站放到首頁(yè)深圳市推廣網(wǎng)站的公司
  • 中學(xué)生制作網(wǎng)站怎么做seo外鏈資源
  • 昆明seo搜索引擎優(yōu)化的簡(jiǎn)稱是
  • 四川企業(yè)品牌網(wǎng)站建設(shè)愛站工具下載
  • 英文網(wǎng)站建設(shè)官網(wǎng)優(yōu)化搜索引擎的方法
  • 做色情網(wǎng)站需要多少錢企業(yè)網(wǎng)站建設(shè)案例
  • 成交型網(wǎng)站建設(shè)app營(yíng)銷策略
  • 電子商務(wù)網(wǎng)站的作用有哪些泰安網(wǎng)站優(yōu)化公司
  • 網(wǎng)站中插入視頻代碼佛山疫情最新消息
  • 做b2b專業(yè)網(wǎng)站一般有效果嗎怎么給客戶推廣自己的產(chǎn)品
  • 深圳快速網(wǎng)站制作如何利用互聯(lián)網(wǎng)宣傳與推廣
  • 無錫做網(wǎng)站選優(yōu)易信定制網(wǎng)站建設(shè)電話
  • 網(wǎng)站建設(shè)與管理讀書心得推廣品牌的方法
  • 注冊(cè)網(wǎng)站域名需要什么資料醫(yī)療器械排名優(yōu)化seo
  • 制作網(wǎng)站 優(yōu)幫云網(wǎng)絡(luò)營(yíng)銷專業(yè)學(xué)什么
  • 滄浪網(wǎng)站建設(shè)方案今日軍事新聞最新消息新聞報(bào)道
  • 江西建設(shè)銀行招聘網(wǎng)站加強(qiáng)服務(wù)保障滿足群眾急需i
  • 鄭州制作網(wǎng)站公司寧波網(wǎng)站關(guān)鍵詞優(yōu)化排名
  • 做視頻后期的網(wǎng)站推廣app接單網(wǎng)
  • wordpress手機(jī)編輯器插件下載seo專業(yè)培訓(xùn)班
  • 青島模板自助建站李勇seo的博客
  • 上海做網(wǎng)站建設(shè)的公司南京seo排名優(yōu)化
  • 公司網(wǎng)站首頁(yè)大圖怎么做深圳專業(yè)seo
  • wordpress與phpstudy安裝優(yōu)化關(guān)鍵詞有哪些方法