酷極了!5分鐘用Python理解人工智慧優化算法

python小白社區 發佈 2021-08-03T08:06:03.740169+00:00

概述 梯度下降是神經網絡中流行的優化算法之一。一般來說,我們想要找到最小化誤差函數的權重和偏差。梯度下降算法疊代地更新參數,以使整體網絡的誤差最小化。 梯度下降是疊代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。

概述

梯度下降是神經網絡中流行的優化算法之一。一般來說,我們想要找到最小化誤差函數的權重和偏差。梯度下降算法疊代地更新參數,以使整體網絡的誤差最小化。

梯度下降是疊代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常採用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的疊代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來疊代了。在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。

該算法在損失函數的梯度上疊代地更新權重參數,直至達到最小值。換句話說,我們沿著損失函數的斜坡方向下坡,直至到達山谷。基本思想大致如圖3.8所示。如果偏導數為負,則權重增加(圖的左側部分),如果偏導數為正,則權重減小(圖中右半部分) 42 。學習速率參數決定了達到最小值所需步數的大小。

誤差曲面

尋找全局最佳方案的同時避免局部極小值是一件很有挑戰的事情。這是因為誤差曲面有很多的峰和谷,如圖3.9所示。誤差曲面在一些方向上可能是高度彎曲的,但在其他方向是平坦的。這使得優化過程非常複雜。為了避免網絡陷入局部極小值的境地,通常要指定一個衝量(momentum)參數。

我很早就發現,使用梯度下降的反向傳播通常收斂得非常緩慢,或者根本不收斂。在編寫第一個神經網絡時,我使用了反向傳播算法,該網絡包含一個很小的數據集。網絡用了3天多的時間才收斂到一個解決方案。幸虧我採取一些措施加快了處理過程。

說明 雖然反向傳播相關的學習速率相對較慢,但作為前饋算法,其在預測或者分類階段是相當快速的。

隨機梯度下降

傳統的梯度下降算法使用整個數據集來計算每次疊代的梯度。對於大型數據集,這會導致冗餘計算,因為在每個參數更新之前,非常相似的樣本的梯度會被重新計算。隨機梯度下降(SGD)是真實梯度的近似值。在每次疊代中,它隨機選擇一個樣本來更新參數,並在該樣本的相關梯度上移動。因此,它遵循一條曲折的通往極小值的梯度路徑。在某種程度上,由於其缺乏冗餘,它往往能比傳統梯度下降更快地收斂到解決方案。

說明 隨機梯度下降的一個非常好的理論特性是,如果損失函數是凸的 43 ,那麼保證能找到全局最小值。

代碼實踐

理論已經足夠多了,接下來敲一敲實在的代碼吧。

一維問題

假設我們需要求解的目標函數是:

()=2+1f(x)=x2+1

顯然一眼就知道它的最小值是 =0x=0 處,但是這裡我們需要用梯度下降法的 Python 代碼來實現。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
一維問題的梯度下降法示例
"""


def func_1d(x):
 """
 目標函數
 :param x: 自變量,標量
 :return: 因變量,標量
 """
 return x ** 2 + 1


def grad_1d(x):
 """
 目標函數的梯度
 :param x: 自變量,標量
 :return: 因變量,標量
 """
 return x * 2


def gradient_descent_1d(grad, cur_x=0.1, learning_rate=0.01, precision=0.0001, max_iters=10000):
 """
 一維問題的梯度下降法
 :param grad: 目標函數的梯度
 :param cur_x: 當前 x 值,通過參數可以提供初始值
 :param learning_rate: 學習率,也相當於設置的步長
 :param precision: 設置收斂精度
 :param max_iters: 最大疊代次數
 :return: 局部最小值 x*
 """
 for i in range(max_iters):
 grad_cur = grad(cur_x)
 if abs(grad_cur) < precision:
 break # 當梯度趨近為 0 時,視為收斂
 cur_x = cur_x - grad_cur * learning_rate
 print("第", i, "次疊代:x 值為 ", cur_x)

 print("局部最小值 x =", cur_x)
 return cur_x


if __name__ == '__main__':
 gradient_descent_1d(grad_1d, cur_x=10, learning_rate=0.2, precision=0.000001, max_iters=10000)

就是這麼酷吧!用Python理解剃度下降!

關鍵字:

【好物分享】感動…“嘟唇精華“讓我重新認識我的唇💋💋💋

2021-11-16T09:15:48.475315+00:00

只要一步『脫皮醜嘴→性感啾唇』

原以為這輩子跟唇膏無緣了😭

 

我素唇好好的,一塗口紅就狂起屑

上色變得很不均勻,再燒的人氣專櫃款,也被我塗的很廉價

什麼方法都試過啦!

護唇膏打底、凡士林厚敷…

對頑劣死皮頂多「一次性」效果

補個妝…原!形!畢!露!

口紅因此一支支被冷凍(大哭)

 

以為要粗糙一生,結果我朋友意外推坑【嘟嘟精華唇蜜

從此開啟我唇的第二人生💋

https://www.cashin.tw/product/000000000034960

 

 

我一直對唇蜜印象很差

黏膩感結合死皮…恩…抿起來很噁

所以聽到關鍵字,本能的搖頭拒絕

朋友表示:『這韓國醫美研發剛好專治你的唇況,就死馬當活馬醫吧!』

 

好…回過神我就下單了(腦波很弱

但,第一次擦就打破我對唇蜜的認知!

不知道什麼原理,這支居然把死皮治得服服貼貼😳

滋潤度.持久度碾壓護唇膏,不需要一直補擦(也是,哪家護唇膏會下重本加玻尿酸

不誇張,我卸妝後唇況還嫩到隔天,代表成分真的有被吸收

 

色澤是淡淡珊瑚色的“韓系玻璃唇

單擦顯氣色,薄荷還能激出天然唇珠///

試著疊擦口紅…

1+1效果驚為天人!居然沒有脫皮了!

而且唇紋被撫平後

妝感都level up了

果然好看的唇,才是一個好妝容的核心

現在,我那些塵封已久的唇膏都能拿來用了❤️

 

原來拯救脫皮唇幾百塊能搞定…

早知道當初就該三支組合買下去

anyway我是一定會回購啦哈哈

https://www.cashin.tw/product/000000000034960

 

 

商品資訊

 

MAGICOM_4D瞬感豐唇精華_微涼感(乾燥玫瑰色)

 

讓人忍不著想親的 C粉嫩唇!

單擦:潤色護唇 打造自然澎澎感

疊擦:塗自己喜歡的口紅 豐潤更顯色

加強:唇峰二次加強 免注射也有微笑唇

 

https://www.cashin.tw/product/000000000034960