《繁凡的深度學習筆記》第 2 章 回歸問題與神經元模型(DL筆記整理系列)
3043331995@qq.com
https://fanfansann.blog.csdn.net/
https://github.com/fanfansann/fanfan-deep-learning-note
作者:繁凡
version 1.0 2022-1-20
宣告:
1)《繁凡的深度學習筆記》是我自學完成深度學習相關的教材、課程、論文、專案實戰等內容之后,自我總結整理創作的學習筆記,寫文章就圖一樂,大家能看得開心,能學到些許知識,對我而言就已經足夠了 ^q^ ,
2)因個人時間、能力和水平有限,本文并非由我個人完全原創,文章部分內容整理自互聯網上的各種資源,參考內容標注在每章末的參考資料之中,
3)本文僅供學術交流,非商用,所以每一部分具體的參考資料并沒有詳細對應,如果某部分不小心侵犯了大家的利益,還望海涵,并聯系博主洗掉,非常感謝各位為知識傳播做出的貢獻!
4)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝,
5)本文由我個人( CSDN 博主 「繁凡さん」(博客) , 知乎答主 「繁凡」(專欄), Github 「fanfansann」(全部原始碼) , 微信公眾號 「繁凡的小島來信」(文章 P D F 下載))整理創作而成,且僅發布于這四個平臺,僅做交流學習使用,無任何商業用途,
6)「我希望能夠創作出一本清晰易懂、可愛有趣、內容詳實的深度學習筆記,而不僅僅只是知識的簡單堆砌,」
7)本文《繁凡的深度學習筆記》全匯總鏈接:《繁凡的深度學習筆記》前言、目錄大綱 https://fanfansann.blog.csdn.net/article/details/121702108
8)本文的Github 地址:https://github.com/fanfansann/fanfan-deep-learning-note/ 孩子的第一個 『Github』!給我個 ? ??? Starred \boxed{? \,\,\,\text{Starred}} ?Starred? 嘛!謝謝!!o(〃^▽^〃)o
9)此屬 version 1.0 ,若有錯誤,還需繼續修正與增刪,還望大家多多指點,本文會隨著我的深入學習不斷地進行完善更新,Github 中的 P D F 版也會盡量每月進行一次更新,所以建議點贊收藏分享加關注,以便經常過來回看!
本章目錄
- 《繁凡的深度學習筆記》第 2 章 回歸問題與神經元模型
- 2.1 線性回歸
- 2.1.1 線性模型
- 2.2 神經元模型
- 2.2.1 神經元
- 2.2.2 優化方法
- 2.2.2.1 梯度下降演算法
- 2.2.2.1.1 Jacobian 和 Hessian 矩陣(選學)
- 2.2.2.1.2 有限差分法與對稱導數法估計梯度大小(選學)
- 2.2.2.2 最小二乘法
- 2.2.3 神經元線性模型實戰
- 2.3 再探回歸
- 2.3.1 非線性模型
- 2.4 面試題目集錦
- 2.5 參考資料
本章話題(點擊即可跳轉喲):
話題 1 :什么是回歸分析?什么又是回歸問題?
話題 2 :有哪些回歸分析方法?
話題 3 :如何將線性回歸模型模型化?
話題 4 :什么是神經元與神經元模型?
話題 5 :什么是損失函式?為什么需要使用損失函式?
話題 6 :回歸問題中常用的損失函式有哪些?
話題 7 :深度學習為什么需要使用優化演算法
話題 8 :有哪些常用的優化演算法?
話題 9 :什么是梯度下降演算法?
話題 10 :梯度下降演算法為什么可以優化目標函式?(選學)
話題 11 :訓練程序中如何避免陷入區域最優解?如何逃離鞍點?
話題 12 : 趣味話題:有時候我們沒辦法直接計算梯度,可以嘗試估計梯度大小嗎?- 有限差分法與對稱導數法(選學)
話題 13 :什么是最小二乘法?如何使用最小二乘法解決線性回歸問題?
話題 14 :道理我都懂,怎么用代碼實作并解決神經元線性模型呢?
話題 15 :線性模型已經完全學會了!如果換成非線性的模型該怎么辦呢?
《繁凡的深度學習筆記》第 2 章 回歸問題與神經元模型
話題 1 :什么是回歸分析?什么又是回歸問題?
??回歸分析(Regression Analysis)是一種統計學上分析資料的方法,目的在于了解兩個或多個變數間是否相關、相關方向與強度,并建立數學模型以便觀察特定變數來 預測 (prediction)研究者感興趣的變數,在自然科學和社會科學領域,回歸經常用來表示 輸入和輸出之間的關系 ,
??在機器學習領域中的大多數任務通常都與 預測 有關, 當我們進行回歸分析,想要預測一個預測值在連續的實數范圍內時,我們稱之為 回歸問題 ,常見的例子有:預測房價 / 股票、預測需求 / 銷量等,但不是所有的 預測 都是回歸問題,在下一章節中,我們將介紹 分類問題 ,分類問題的目標是預測資料屬于一組類別中的哪一種,也即預測預測值屬于某一段連續的實數區間的方法,
話題 2 :有哪些回歸分析方法?
??統計學中的回歸分析方法一般有 線性回歸(簡單線性回歸、復回歸、對數線性回歸)、非線性回歸、對數幾率回歸、偏回歸、自回歸(自回歸滑動平均模型、差分自回歸滑動平均模型、向量自回歸模型),本章主要探討線性回歸與非線性回歸,對于其他更多的回歸方法僅給出一些簡單的介紹,更多詳細講解、代碼實作及其應用,詳見《繁凡的機器學習筆記》,
? ? ?\, ?線性回歸
??在回歸問題中,如果使用線性模型去逼近真實模型,那么我們把這一類方法叫做線性回歸(Linear Regression),線性回歸是回歸問題中的一種具體的實作,
??線性回歸基于幾個簡單的假設:首先,假設自變數 x \mathbf{x} x 和因變數 y y y 之間的關系是線性的,即 y y y 可以表示為 x \mathbf{x} x 中元素的加權和,這里通常允許包含觀測值的一些噪聲;其次,我們假設任何噪聲都比較正常,如噪聲遵循正態分布 (NormalDistribution) N ( μ , σ 2 ) \mathcal{N}\left(\mu, \sigma^{2}\right) N(μ,σ2),
??簡單線性回歸(simple linear regression),在統計學中指只有一個解釋變數的線性回歸模型,往往是以單一變數預測,用于判斷兩變數之間相關的方向和程度,
??復回歸分析(multiple regression analysis),也稱多變數回歸,是簡單線性回歸的一種延伸應用,用以了解一個因變數與兩組以上自變數的函式關系,
??對數線性回歸(Log-linear model),是將自變數和因變數都取對數值之后再進行線性回歸,所以根據自變數的數量,可以是對數簡單線性回歸,也可以是對數復回歸,
? ? ?\, ?非線性回歸
??非線性回歸(non-linear regression),是回歸函式關于未知回歸系數具有非線性結構的回歸,
? ? ?\, ?對數幾率回歸
??對數幾率回歸(Logistic Regression),又稱邏輯回歸,是一種對數幾率模型(英語:Logit model,又譯作邏輯模型、評定模型、分類評定模型)是離散選擇法模型之一,屬于多重變數分析范疇,是社會學、生物統計學、臨床、數量心理學、計量經濟學、市場營銷等統計實證分析的常用方法,關于對數幾率回歸的更多講解,詳見**《繁凡的深度學習筆記》 第 3 章 分類問題與資訊論基礎 3.2 邏輯回歸**,
? ? ?\, ?自回歸模型
自回歸模型(Autoregressive model),簡稱AR模型,是統計上一種處理時間序列的方法,用同一變數例如 x {\displaystyle x} x 的之前各期,亦即 x 1 {\displaystyle x_{1}} x1? 至 x t ? 1 {\displaystyle x_{t-1}} xt?1? 來預測本期 x t {\displaystyle x_{t}} xt? 的表現,并假設它們為一線性關系,因為這是從回歸分析中的線性回歸發展而來,只是不用 x {\displaystyle x} x 預測 y {\displaystyle y} y ,而是用 x {\displaystyle x} x 預測 x {\displaystyle x} x (自己);所以叫做自回歸,
2.1 線性回歸
??我們在 話題 2 中已經講解過了什么是線性回歸,我們繼續深入探討,考慮如何解決線性回歸問題,
2.1.1 線性模型
話題 3 :如何將線性回歸模型模型化?
??考慮一個實體:作為一個有志青年,我們想要預測未來的城市房價!我們希望可以根據房屋的面積和房齡來估算房屋的價格,為了開發一個能預測房價的模型,我們首先需要收集一個真實的資料集,這個資料集包括了房屋的銷售價格、面積和房齡,在機器學習的術語中,通常將資料集稱之為 訓練資料集(training data set)或 訓練集(training set),其中資料集內的每行資料(這里就是與一次房屋交易相對應的各種資料)稱為樣本(sample),或 資料點(data point)或 資料樣本(data instance),將我們想要預測的目標(這里顯然是房屋的價格)稱之為標簽(label)或目標(target),預測所依據的自變數(面積和房齡)稱為特征(feature)或協變數(covariate),
??通常,我們使用 n n n 或者 m m m 來表示資料集中的樣本數,對索引為 i i i 的樣本,其輸入表示為 x ( i ) = [ x 1 ( i ) , x 2 ( i ) ] T \boldsymbol {x}^{(i)} = [x_1^{(i)}, x_2^{(i)}]^{\mathrm{T}} x(i)=[x1(i)?,x2(i)?]T ,其對應的標簽是 y ( i ) y^{(i)} y(i) ,
??這里線性回歸的線性假設指目標(房屋價格)可以表示為特征(面積和房齡)的加權和,如下面的式子:
p
r
i
c
e
=
w
a
r
e
a
?
a
r
e
a
+
w
a
g
e
?
a
g
e
+
b
.
(2.1)
\mathrm{price} =w_{\mathrm{area}} \cdot \mathrm{area} +w_{\mathrm{age}} \cdot \mathrm{age} + b.\tag{2.1}
price=warea??area+wage??age+b.(2.1)
式中的 w a r e a w_{\mathrm{area}} warea??? 和 w a g e w_{\mathrm{age}} wage??? 稱為權重(weight), b b b?? 稱為偏置(bias),或稱為偏移量(offset)、截距(intercept),
??權重決定了每個特征對我們預測值的影響,偏置是指當所有特征都取值為 0 0 0 時,預測值應該為多少,如果沒有偏置項,我們模型的表達能力將受到限制, 嚴格來說,上式是輸入特征的一個仿射變換(affine transformation),仿射變換的特點是通過加權和對特征進行線性變換(linear transformation),并通過偏置項來進行平移(translation),
??至此問題就變為了:給定一個資料集,我們的目標是尋找模型的權重 w \boldsymbol w w? 和偏置 b b b? ,使得根據模型做出的預測大體符合資料里的真實價格,輸出的預測值由輸入特征通過線性模型的仿射變換決定,仿射變換由所選權重和偏置確定,顯然我們只需要求出符合實際情況的模型引數 w , b \boldsymbol w,b w,b?,就可以得到一個可以大致預測房屋價格的線性模型,這種模型被發現與人類的神經元模型十分吻合,我們考慮從神經元模型的角度出發解決上面的問題,
2.2 神經元模型
2.2.1 神經元
話題 4 :什么是神經元與神經元模型?
??神經元(Neuron),即神經元細胞(Nerve Cell),是神經系統最基本的結構和功能單位,如圖 2.1 所示,典型的生物神經元結構分為細胞體和突起兩大部分,成年人大腦中包含了約 1000 億個神經元,每個神經元通過樹突獲取輸入信號,通過軸突傳遞輸出信號,神經元之間相互連接構成了巨大的神經網路,從而形成了人腦的感知和意識基礎,
??
??在神經元中,樹突中接收到來自其他神經元或視網膜等環境傳感器的資訊 x i x_i xi??? ,該資訊通過突觸權重 w i w_i wi??? 來加權,以確定輸入的影響(即通過設定突觸權重的大小,使 w i w_i wi??? 與 x i x_i xi?? 相乘 來 激活 或 抑制該輸入資訊), 來自多個源的加權輸入以加權和 y = ∑ i x i w i + b \displaystyle y = \sum_i x_i w_i + b y=i∑?xi?wi?+b?? 的形式匯聚在細胞核中,然后將這些資訊發送到軸突 y y y?? 中進一步處理,通常會通過 σ ( y ) \sigma(y) σ(y)?? 進行一些非線性處理,之后,它要么到達目的地(例如肌肉),要么通過樹突進入另一個神經元(一層又一層地組成神經網路),
??考慮將生物神經元 (Neuron) 的模型抽象成具體的數學模型得到 神經元模型:對于神經元的輸入向量 𝒙 = [ 𝑥 1 , ? ? 𝑥 2 , 𝑥 3 , … , 𝑥 𝑛 ] T 𝒙 = [𝑥_1, ??𝑥_2, 𝑥_3, … , 𝑥_𝑛]^\mathrm{ T } x=[x1?,??x2?,x3?,…,xn?]T,經過函式映射: 𝑓 θ : 𝒙 → 𝑦 𝑓_{\theta}: 𝒙 → 𝑦 fθ?:x→y 后得到輸出 𝑦 𝑦 y ,其中 θ {\theta} θ 為函式 𝑓 𝑓 f 自身的引數,考慮一種簡化的情況,即線性變換,對于兩個列向量 𝒙 , 𝒘 𝒙,𝒘 x,w,我們希望可以計算得到類似神經元模型 y = ∑ i x i w i + b \displaystyle y = \sum_i x_i w_i + b y=i∑?xi?wi?+b 的值,我們可以將其中一個列向量轉置之后相乘: 𝑓 ( 𝒙 ) = 𝒘 T 𝒙 + 𝑏 𝑓(𝒙) = 𝒘^\mathrm{ T } 𝒙 + 𝑏 f(x)=wTx+b,展開為標量形式:
f ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + ? + w n x n + b (2.2) f(x) = w_1x_1 + w_2x_2 + w_3x_3 + \cdots + w_nx_n + b\tag{2.2} f(x)=w1?x1?+w2?x2?+w3?x3?+?+wn?xn?+b(2.2)
上式可以直觀地展示為如圖 2.2 所示:
??
??引數 θ = 𝑤 1 , 𝑤 2 , 𝑤 3 , . . . , 𝑤 𝑛 , 𝑏 \theta= {𝑤_1, 𝑤_2, 𝑤_3, . . . , 𝑤_𝑛,𝑏} θ=w1?,w2?,w3?,...,wn?,b 確定了神經元的狀態,通過固定 𝜃 引數即可確定此神經元的處理邏輯,當神經元輸入節點數 𝑛 = 1 𝑛 = 1 n=1 也即單輸入時,神經元數學模型可進一步簡化為:
y
=
w
x
+
b
(2.3)
y = wx + b\tag{2.3}
y=wx+b(2.3)
??此時我們可以繪制出神經元的輸出
𝑦
𝑦
y? 和輸入
𝑥
𝑥
x? 的變化趨勢,如圖 2.3 所示,隨著輸入信號
𝑥
𝑥
x? 的增加,輸出電平
𝑦
𝑦
y? 也隨之線性增加,其中
𝑤
𝑤
w?引數可以理解為直線的斜率 (Slope),
b
b
b? 引數為直線的偏置 (Bias),
??
??我們知道 n + 1 n+1 n+1 個點確定 n n n 次項多項式, n + 1 n+1 n+1 個點確定 n n n 元一次方程(最小二乘法), 顯然對于一個單輸入向量,我們只需要觀測得到兩個不同資料點,就可求得單輸入線性神經元模型的引數,同樣的,對于 n n n 輸入的現象神經元模型,只需要觀測采樣 n + 1 n + 1 n+1 組不同資料點即可得到所有引數,似乎就此線性神經元模型可以得到完美的解決,那么上述方法是否存在著什么問題呢?
話題 5 :什么是損失函式?為什么需要使用損失函式?
??考慮對于任何采樣點,都有可能存在觀測誤差,我們假設觀測誤差變數
?
\epsilon
? 屬于均值為
μ
\mu
μ,方差為
σ
2
\sigma^{2}
σ2 的正態分布 (NormalDistribution) 或高斯分布 (Gaussian Distribution):
N
(
μ
,
σ
2
)
\mathcal{N}\left(\mu, \sigma^{2}\right)
N(μ,σ2),那么我們觀測采樣得到的樣本符合:
y
=
w
x
+
b
+
?
,
?
~
N
(
μ
,
σ
2
)
(2.4)
y=w x+b+\epsilon, \epsilon \sim \mathcal{N}\left(\mu, \sigma^{2}\right)\tag{2.4}
y=wx+b+?,?~N(μ,σ2)(2.4)
其中正態分布概率密度函式如下:
p ( x ) = 1 2 π σ 2 exp ? ( ? 1 2 σ 2 ( x ? μ ) 2 ) . (2.5) p(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (x - \mu)^2\right).\tag{2.5} p(x)=2πσ2 ?1?exp(?2σ21?(x?μ)2).(2.5)
??我們發現一旦引入觀測誤差以后,即使簡單如線性模型,如果僅采樣兩個資料點,可能會帶來較大 估計偏差 ,如圖 2.4 所示,圖中的資料點均帶有觀測誤差,如果基于藍色矩形塊的兩個資料點進行估計,則計算出的藍色虛線與真實橙色直線存在較大偏差,
??
??為了減少觀測誤差引入的估計偏差,可以通過采樣多組資料樣本集合 𝔻 = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( n ) , y ( n ) ) } 𝔻 = \left\{\left(x^{(1)}, y^{(1)}\right),\left(x^{(2)}, y^{(2)}\right), \ldots,\left(x^{(n)}, y^{(n)}\right)\right\} D={(x(1),y(1)),(x(2),y(2)),…,(x(n),y(n))},然后找出一條 “最好” 的直線,使得它盡可能地讓所有采樣點到該直線的 誤差 (Error) 或 損失 (Loss) 之和最小即可,
??也就是說,由于觀測誤差 ? \epsilon ? 的存在,當我們采集了多個資料點 𝔻 𝔻 D 時,可能不存在一條直線完美的穿過所有采樣點,因此我們希望能找到一條比較 “好” 的位于采樣點中間的直線,這個程序就叫做 擬合(fit),
??為了判別擬合出的直線是不是 “好” 的,我們需要確定一個擬合程度的度量,因此人們提出了 損失函式 來進行衡量,
??損失函式(loss function),又稱 代價函式(cost function),是將隨機事件或其有關隨機變數的取值映射為非負實數以表示該隨機事件的“風險”或“損失”的函式,在應用中,損失函式通常作為學習準則與優化問題相聯系,即通過最小化損失函式求解和評估模型,損失函式 能夠量化目標的實際值與預測值之間的差距,通常我們會選擇非負數作為損失,且數值越小表示損失越小,完美預測時的損失為 0 0 0? ,
話題 6 :回歸問題中常用的損失函式有哪些?
回歸問題中常用的損失函式有平方和誤差、均方根誤差、平均絕對值誤差、平滑平均絕對誤差等,
? ? ?\, ??均方誤差 (Mean Squared Error, MSE)
??首先一個很自然的想法就是,求出當前模型的所有采樣點上的預測值
w
x
(
i
)
+
b
w x^{(i)}+b
wx(i)+b? 與真實值
y
(
i
)
y^{(i)}
y(i)? 之間的差的平方和作為總誤差
L
\mathcal{L}
L??,當樣本
i
i
i? 的預測值為
y
^
(
i
)
=
w
x
(
i
)
+
b
\hat{y}^{(i)}=w x^{(i)}+b
y^?(i)=wx(i)+b? (通常使用“尖角”hat 符號表示估計值、預測值),其相應的真實標簽為
y
(
i
)
y^{(i)}
y(i)? 時,平方和誤差可以定義為:
L
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
(
y
^
(
i
)
?
y
(
i
)
)
2
.
(2.6)
\mathcal{L}^{(i)}(\boldsymbol {w}, b) =\frac{1}{n} \sum_{i=1}^{n} \left(\hat{y}^{(i)} - y^{(i)}\right)^2.\tag{2.6}
L(i)(w,b)=n1?i=1∑n?(y^?(i)?y(i))2.(2.6)
??在訓練模型時,我們希望搜索到一組引數( w ? , b ? \boldsymbol {w}^* , b^* w?,b? ),這組引數能最小化在所有訓練樣本上的總損失 L \mathcal{L} L,其對應的直線就是我們要尋找的最優直線:
w ? , b ? = argmin ? w , b 1 n ∑ i = 1 n ( w x ( i ) + b ? y ( i ) ) 2 (2.7) \boldsymbol {w}^{*}, b^{*}=\underset{\boldsymbol {w}, b}{\operatorname{argmin}} \frac{1}{n} \sum_{i=1}^{n} \left(w x^{(i)}+b-y^{(i)}\right)^{2}\tag{2.7} w?,b?=w,bargmin?n1?i=1∑n?(wx(i)+b?y(i))2(2.7)
??其中 𝑛 𝑛 n 表示采樣點的個數,這種誤差計算方法稱為均方誤差 (Mean Squared Error) 簡稱 MSE,
即:
MSE
=
1
n
∑
i
=
1
n
(
y
^
(
i
)
?
y
(
i
)
)
2
(2.8)
\text{MSE}=\dfrac 1 n \sum^{n}_{i=1}(\hat y^{(i)}-y^{(i)})^2\tag{2.8}
MSE=n1?i=1∑n?(y^?(i)?y(i))2(2.8)
?
?
?\,
?均方根誤差(Root Mean Square Error, RMSE)
RMSE
=
1
n
∑
i
=
1
n
(
y
^
(
i
)
?
y
(
i
)
)
2
(2.9)
\text{RMSE}=\sqrt{\dfrac {1} {n} \sum_{i=1}^n(\hat y^{(i)}-y^{(i)})^2}\tag{2.9}
RMSE=n1?i=1∑n?(y^?(i)?y(i))2
?(2.9)
均方根誤差,也叫回歸系統的擬合標準差,是
MSE
\text{MSE}
MSE 的平方根,容易受例外點(誤差很大的點)影響,易朝減小例外點誤差的方向行進而犧牲總體性能,
?
?
?\,
?平均絕對誤差(Mean Absolute Error, MAE)
MAE
=
1
n
∑
i
=
1
n
∣
?
y
^
(
i
)
?
y
(
i
)
?
∣
(2.10)
\text{MAE}=\frac 1 n \sum_{i=1}^n\mid\,\hat y^{(i)}-y^{(i)}\,\mid\tag{2.10}
MAE=n1?i=1∑n?∣y^?(i)?y(i)∣(2.10)
絕對值誤差的平均值,由于導數是常數,不利于梯度下降法更新,且該函式在
0
0
0 處不可微,
?
?
?\,
?平滑平均絕對誤差(HuberLoss)
L
δ
(
y
i
)
=
{
1
2
(
y
^
(
i
)
?
y
(
i
)
)
2
,
∣
y
^
(
i
)
?
y
(
i
)
∣
≤
δ
δ
∣
y
^
(
i
)
?
y
(
i
)
∣
?
1
2
δ
2
,
otherwise
(2.11)
L_{\delta}\left(y_{i}\right)=\left\{\begin{array}{ll}\dfrac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2}, & \left|\hat{y}^{(i)}-y^{(i)}\right| \leq \delta \\\delta\left|\hat{y}^{(i)}-y^{(i)}\right|-\dfrac{1}{2} \delta^{2}, & \text { otherwise }\end{array}\right.\tag{2.11}
Lδ?(yi?)=??????21?(y^?(i)?y(i))2,δ∣∣?y^?(i)?y(i)∣∣??21?δ2,?∣∣?y^?(i)?y(i)∣∣?≤δ otherwise ?(2.11)
Huber Loss 是一個用于回歸問題的帶參損失函式,結合了
MSE
\text{MSE}
MSE 和
MAE
\text{MAE}
MAE 的優點, 優點是能增強
MSE
\text{MSE}
MSE 對離群點的魯棒性,對例外點不會特別敏感同時在
0
0
0 處也可微,當預測偏差小于
δ
\delta
δ 時,它采用平方誤差,當預測偏差大于
δ
\delta
δ 時,采用的線性誤差,也正因如此,我們需要不斷地調整超引數
δ
\delta
δ ,也因此帶來一些不便,
?? 回到問題本身,我們這里選擇均方差作為損失函式解決線性神經元模型問題,我們需要找出最優引數 (Optimal Parameter) w ? , b ? \boldsymbol {w}^{*}, b^{*} w?,b? ,使得輸入和輸出滿足線性關系 y ( i ) = w x ( i ) + b , i ∈ [ 1 , n ] y^{(i)}=w x^{(i)}+b, i \in[1, n] y(i)=wx(i)+b,i∈[1,n],但是由于觀測誤差 ? \epsilon ? 的存在,需要通過采樣足夠多組的資料樣本組成的資料集 (Dataset): 𝔻 = ( 𝑥 ( 1 ) , 𝑦 ( 1 ) ) , ( 𝑥 ( 2 ) , 𝑦 ( 2 ) ) , … , ( 𝑥 ( 𝑛 ) , 𝑦 ( 𝑛 ) ) 𝔻 ={(𝑥(1),𝑦(1)), (𝑥(2),𝑦(2)),… , (𝑥(𝑛), 𝑦(𝑛))} D=(x(1),y(1)),(x(2),y(2)),…,(x(n),y(n)),來找到一組最優的引數 𝒘 ? , b ? 𝒘^{*}, b^{*} w?,b? 使得均方差 L = 1 n ∑ i = 1 n ( w x ( i ) + b ? y ( i ) ) 2 \mathcal{L} =\displaystyle \frac{1}{n} \sum_{i=1}^{n} \left(w x^{(i)}+b-y^{(i)}\right)^{2} L=n1?i=1∑n?(wx(i)+b?y(i))2 最小即可,
2.2.2 優化方法
話題 7 :深度學習為什么需要使用優化演算法
??經過上面內容的學習,我們對深度學習進行一次簡單的總結,在傳統的監督機器學習中,往往會給出訓練資料集
D
=
{
(
x
1
,
y
1
)
,
…
,
(
x
N
,
y
N
)
}
\mathcal D = \{(x_1, y_1),…,(x_N, y_N)\}
D={(x1?,y1?),…,(xN?,yN?)},如 (輸入影像,輸出標簽) 對,我們希望訓練一個預測模型
y
^
=
f
θ
(
x
)
\hat{y}=f_{\theta }\left ( x \right )
y^?=fθ?(x) ,引數化
θ
θ
θ ,通過求解下式得到引數的全域最優解:
θ
?
=
arg
?
min
?
θ
L
(
D
;
θ
,
ω
)
(2.12)
\theta^{*}=\arg \min _{\theta} \mathcal{L}(\mathcal{D} ; \theta, \omega)\tag{2.12}
θ?=argθmin?L(D;θ,ω)(2.12)
其中
L
\mathcal L
L 是上一小節介紹的用于測量真實標簽與
f
θ
(
?
)
f_{\theta}(\cdot)
fθ?(?) 預測的標簽之間的誤差的損失函式, 我們通過評估具有已知標簽的多個測驗點來測量泛化能力,
??如何求解最優化的引數是我們需要解決的問題,暴力查找最優的引數帶來的時間空間復雜度顯然是不能接受的,為此人們發明了無數種優化演算法來予以解決,優化演算法的功能是通過改善訓練方式來最優化損失函式,可以加快收斂速度,使得訓練的時間更短,還可以獲得更優的損失函式,
話題 8 :有哪些常用的優化演算法?
??深度學習中的優化演算法有很多,例如梯度下降演算法、動量法、AdaGrad演算法、RMSProp演算法、Adadelta演算法、Adam演算法等,我們這里著重介紹最簡單的一種優化方法:梯度下降演算法,以及另一種可以高效解決線性回歸問題的經典演算法:最小二乘法,其余優化演算法詳解詳見 《繁凡的深度學習筆記》第 7 章 過擬合、優化演算法與引數優化 7.9 優化演算法
2.2.2.1 梯度下降演算法
話題 9 :什么是梯度下降演算法?
??梯度下降演算法(Gradient Descent)是神經網路訓練中最常用的優化演算法,配合強大的圖形處理芯片 GPU 的并行加速能力,非常適合優化海量資料的神經網路模型,自然也適合優化我們這里的神經元線性模型,這里先簡單地應用梯度下降演算法,以及如何使用它解決神經元模型預測的優化問題,
??我們在高中都學過導數 (Derivative) 的概念,如果要求解一個函式的極大、極小值,可以簡單地令導數函式為 0 0 0??????????,求出對應的自變數點 (稱為駐點) ,再檢驗駐點型別即可,以函式 𝑓 ( 𝑥 ) = x 2 sin ? ( 𝑥 ) 𝑓(𝑥) = x^2 \sin(𝑥) f(x)=x2sin(x)?????????? 為例,我們繪制出函式及其導數在 𝑥 ∈ [ ? 1 , 1 ] 𝑥\in [?1 ,1] x∈[?1,1]?????????? 的區間曲線,其中藍色實線為 𝑓 ( 𝑥 ) 𝑓(𝑥) f(x)??????????,黃色虛線為 d f ( x ) d x \dfrac{\mathrm{d} f(x)}{\mathrm{d} x} dxdf(x)???????????,可以看出,函式導數為 0 0 0?????????? 的點即為 𝑓 ( 𝑥 ) 𝑓(𝑥) f(x)?????????? 的臨界點(critical point)或 駐點(stationary point),函式的極大值和極小值點均出現在駐點中,
??
??導數 f ′ ( x ) f'(x) f′(x) 代表 f ( x ) f(x) f(x) 在點 x x x 處的斜率,換句話說,它表明如何縮放輸入的小變化才能在輸出獲得相應的變化: f ( x + ? ) ≈ f ( x ) + ? f ′ ( x ) f(x + ?) ≈ f(x) + ?f'(x) f(x+?)≈f(x)+?f′(x),因此導數對于最小化一個函式很有用,因為它告訴我們如何更改 x x x 來略微地改善 y y y,例如,我們知道對于足夠小的 ? ? ? 來說, f ( x ? ? s i g n ( f ′ ( x ) ) ) f(x ? ?sign(f′(x))) f(x??sign(f′(x))) 是比 f ( x ) f(x) f(x) 小的,因此我們可以將 x x x? 往導數的反方向移動一小步來減小 f ( x ) f(x) f(x),這種技術被稱為 梯度下降(gradient descent),
??
??函式的梯度(Gradient)定義為函式對各個自變數的偏導數(Partial Derivative)組成的向量,考慮 3 3 3????????????? 維函式 𝑧 = 𝑓 ( 𝑥 , 𝑦 ) 𝑧 = 𝑓(𝑥, 𝑦) z=f(x,y)?????????????,函式對自變數 𝑥 𝑥 x????????????? 的偏導數記為 ? z ? x \dfrac{\partial z}{\partial x} ?x?z?????????????? 可以衡量點 x x x???????????? 處只有 x x x??????????? 增加時 f ( x ) f(x) f(x)?????????? 如何變化, 梯度是相對一個向量求導的導數: f f f???????? 的導數是包含所有偏導數的向量,記為 ? x f ( x ) \nabla xf(x) ?xf(x)???????,函式對自變數y的偏導數記為 ? z ? y \dfrac{\partial z}{\partial y} ?y?z?????????????? ,則梯度 ? f \nabla f ?f????????????? 為向量 ( ? z ? x , ? z ? y ) \left(\dfrac{\partial z}{\partial x}, \dfrac{\partial z}{\partial y}\right) (?x?z?,?y?z?)?????????????,對于多維的情況下,梯度的第 i i i???? 個元素是 f f f??? 關于 x i x_i xi??? 的偏導數,此時的臨界點是梯度中所有元素都為零的點,我們通過一個具體的函式來感受梯度的性質,
??如圖 2.2.7 所示, f ( x , y ) = ? ( cos ? 2 x + cos ? 2 y ) 2 f(x, y)=-\left(\cos ^{2} x+\cos ^{2} y\right)^{2} f(x,y)=?(cos2x+cos2y)2 ,圖中 𝑥 𝑦 𝑥𝑦 xy 平面的紅色箭頭的長度表示梯度向量的模,箭頭的方向表示梯度向量的方向,可以看到,箭頭的方向總是指向當前位置函式值增速最大的方向,函式曲面越陡峭,箭頭的長度也就越長,梯度的模也越大,
??
?? 通過上面的例子,我們能直觀地感受到,函式在各處的梯度方向 ? 𝑓 ?𝑓 ?f? 總是指向函式值增大的方向,那么梯度的反方向 ? ? 𝑓 ??𝑓 ??f?? 應指向函式值減少的方向,
??我們規定在 u \boldsymbol u u(單位向量)方向的 方向導數(directional derivative)是函式 f f f 在 u \boldsymbol u u 方向的斜率,也即方向導數是函式 f ( x + α u ) f(x + \alpha \boldsymbol u) f(x+αu) 關于 α \alpha α 的導數(在 α = 0 \alpha = 0 α=0 時取得),使用鏈式法則,我們可以發現當 α = 0 \alpha = 0 α=0 時, ? ? α f ( x + α u ) = u ? ? x f ( x ) \dfrac{\partial}{\partial \alpha} f(\boldsymbol{x}+\alpha \boldsymbol{u})=\boldsymbol{u}^{\top} \nabla_{x} f(\boldsymbol{x}) ?α??f(x+αu)=u??x?f(x),
??為了最小化
f
f
f,我們希望找到使
f
f
f 下降得最快的方向,計算方向導數:
min
?
u
,
u
?
u
=
1
u
?
?
x
f
(
x
)
=
min
?
u
,
u
?
u
=
1
∥
u
∥
2
∥
?
x
f
(
x
)
∥
2
cos
?
θ
(2.13)
\begin{array}{c}\min _{u, u^{\top} u=1} \boldsymbol{u}^{\top} \nabla_{x} f(\boldsymbol{x}) \\=\min _{u, \boldsymbol{u}^{\top} \boldsymbol{u}=1}\|\boldsymbol{u}\|_{2}\left\|\nabla_{\boldsymbol{x}} f(\boldsymbol{x})\right\|_{2} \cos \theta\end{array}\tag{2.13}
minu,u?u=1?u??x?f(x)=minu,u?u=1?∥u∥2?∥?x?f(x)∥2?cosθ?(2.13)
其中
θ
\theta
θ?????????? 是
u
\boldsymbol u
u????????? 與梯度的夾角,將
∥
u
∥
2
=
1
\|\boldsymbol u\|_2 = 1
∥u∥2?=1???????? 代入,并忽略與
u
\boldsymbol u
u???????? 無關的項,就能簡化得到
min
?
u
cos
?
θ
\displaystyle \min_{\boldsymbol u}\cos θ
umin?cosθ???????,這在
u
\boldsymbol u
u?????? 與梯度方向相反時取得最小,換句話說,梯度向量指向上坡,
負梯度向量指向下坡,我們在負梯度方向上移動可以減小
f
f
f????? ,這被稱為最速下降法(method of steepest descent)或 梯度下降(gradient descent),
綜上所述我們按照
x
′
=
x
?
η
?
?
x
f
(2.14)
x^{\prime}=x-\eta \cdot \nabla_x f\tag{2.14}
x′=x?η??x?f(2.14)
來迭代更新 x ′ x' x′? ,即可獲得越來越小的函式值,其中 η \eta η? 是一個確定步長大小的正標量,用來縮放梯度向量,被稱為 學習率(learning rate),
??學習率決定了目標函式能否收斂到區域最小值,以及何時收斂到最小值, 學習率 η \eta η 可由演算法設計者設定,一般設定為某較小的值,如 0.01 , 0.001 0.01,0.001 0.01,0.001 等, 請注意,如果我們使用的學習率太小,將導致 x x x 的更新非常緩慢,需要更多的迭代,
??例如,考慮同一優化問題中 η = 0.05 \eta = 0.05 η=0.05? 的進度, 如圖 2.8 所示,盡管經過了 10 10 10? 次訓練,我們仍然離最優解很遠,
??
??相反,如果我們使用過高的學習率, ∣ η f ′ ( x ) ∣ \left|\eta f'(x)\right| ∣ηf′(x)∣?對于一階泰勒展開式可能太大,在這種情況下, x x x? 的迭代不能保證降低 f ( x ) f(x) f(x)?的值, 例如,當學習率為 η = 1.1 \eta=1.1 η=1.1? 時, x x x? 超出了最優解 x = 0 x=0 x=0? 并逐漸發散,
??我們可以通過幾種不同的方式選擇 η \eta η,普遍的方式是選擇一個小常數,有時我們通過計算,選擇使方向導數消失的步長,還有一種方法是根據幾個 η \eta η 計算 f ( x ? η ? x f ( x ) ) f(x ? \eta \nabla xf(x)) f(x?η?xf(x)),并選擇其中能產生最小目標函式值的 η \eta η ,這種策略被稱為 線搜索 (line search),
?? 對于一個一維函式而言,選擇好學習率
η
\eta
η 之后,向量形式的
x
′
=
x
?
η
?
?
f
x^{\prime}=x-\eta \cdot \nabla f
x′=x?η??f? 就退化成了標量形式:
x
′
=
x
?
η
?
d
y
d
x
(2.15)
x^{\prime}=x-\eta \cdot \frac{\mathrm{d} y}{\mathrm{d} x}\tag{2.15}
x′=x?η?dxdy?(2.15)
??通過上式迭代更新 x ′ x' x′??? 若干次,這樣得到的 𝑥 ′ 𝑥' x′??? 處的函式值 y ′ y' y′???,總是更有可能比在 x x x?? ?處的函式值 y y y??? 小,
??通過上面公式優化引數的方法稱為梯度下降演算法,它通過回圈計算函式的梯度 ? 𝑓 ?𝑓 ?f? 并更新待優化引數 θ \theta θ?,從而得到函式 f f f? 獲得極小值時引數 θ \theta θ? 的最優數值解,需要注意的是,在深度學習中,一般 𝒙 𝒙 x? 表示模型輸入,模型的待優化引數一般用 θ , 𝑤 , 𝑏 \theta,𝑤,𝑏 θ,w,b? 等符號表示,
??現在我們將應用梯度下降演算法來求解
w
?
,
b
?
\boldsymbol w^{*}, b^{*}
w?,b?? 引數,這里要最小化的是均方差誤差函式
L
\mathcal{L}
L?:
L
=
1
n
∑
i
=
0
n
(
w
x
(
i
)
+
b
?
y
(
i
)
)
2
(2.16)
\mathcal{L}=\frac{1}{n} \sum_{i=0}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}\tag{2.16}
L=n1?i=0∑n?(wx(i)+b?y(i))2(2.16)
需要優化的模型引數是
w
\boldsymbol w
w 和
b
b
b ,因此我們按照
w
′
=
w
?
η
?
L
?
w
(2.17)
w^{\prime}=w-\eta \frac{\partial \mathcal{L}}{\partial w}\tag{2.17}
w′=w?η?w?L?(2.17)
b ′ = b ? η ? L ? b (2.18) b^{\prime}=b-\eta \frac{\partial \mathcal{L}}{\partial b}\tag{2.18} b′=b?η?b?L?(2.18)
的方式回圈更新引數即可,
話題 10 :梯度下降演算法為什么可以優化目標函式?(選學)
??梯度下降演算法為什么可以優化目標函式呢?下面給出簡單證明:
??考慮一類連續可微實值函式
f
:
R
→
R
f: \R \rightarrow \mathbb{R}
f:R→R, 利用泰勒展開,我們可以得到
f
(
x
+
?
)
=
f
(
x
)
+
?
f
′
(
x
)
+
O
(
?
2
)
.
(2.19)
f(x + \epsilon) = f(x) + \epsilon f'(x) + \mathcal{O}(\epsilon^2).\tag{2.19}
f(x+?)=f(x)+?f′(x)+O(?2).(2.19)
??即在一階近似中,
f
(
x
+
?
)
f(x+\epsilon)
f(x+?) 可通過
x
x
x 處的函式值
f
(
x
)
f(x)
f(x) 和一階導數
f
′
(
x
)
f'(x)
f′(x) 得出, 我們可以假設在負梯度方向上移動的
?
\epsilon
? 會減少
f
f
f , 為了簡單起見,我們選擇固定步長
η
>
0
\eta > 0
η>0 ,然后取
?
=
?
η
f
′
(
x
)
\epsilon = -\eta f'(x)
?=?ηf′(x) , 將其代入泰勒展開式我們可以得到
f
(
x
?
η
f
′
(
x
)
)
=
f
(
x
)
?
η
f
′
2
(
x
)
+
O
(
η
2
f
′
2
(
x
)
)
.
(2.20)
f(x - \eta f'(x)) = f(x) - \eta f'^2(x) + \mathcal{O}(\eta^2 f'^2(x)).\tag{2.20}
f(x?ηf′(x))=f(x)?ηf′2(x)+O(η2f′2(x)).(2.20)
??如果其導數
f
′
(
x
)
≠
0
f'(x) \neq 0
f′(x)?=0 沒有消失,我們就能繼續展開,這是因為
η
f
′
2
(
x
)
>
0
\eta f'^2(x)>0
ηf′2(x)>0, 此外,我們總是可以令
η
\eta
η 小到足以使高階項變得不相關, 因此,
f
(
x
?
η
f
′
(
x
)
)
?
f
(
x
)
.
(2.21)
f(x - \eta f'(x)) \lessapprox f(x).\tag{2.21}
f(x?ηf′(x))?f(x).(2.21)
這意味著,如果我們使用
x
←
x
?
η
f
′
(
x
)
(2.22)
x \leftarrow x - \eta f'(x)\tag{2.22}
x←x?ηf′(x)(2.22)
來迭代 x x x????,函式 f ( x ) f(x) f(x)???? 的值可能會下降, 因此,在梯度下降中,我們首先選擇初始值 x x x???? 和常數 η > 0 \eta > 0 η>0???? , 然后使用它們連續迭代 x x x????? ,直到停止條件達成,達到全域最小值(全域最優解)或區域最小值后停止,表現在影像上如圖 2.10 所示:
? ? ?\, ???區域最優解
??注意到我們剛剛提到了全域最優解與區域最優解的概念,那么他們分別是什么意思呢?全域最優解可以理解為我們需要解決的問題,在全值域范圍內最優,那么區域最優解就是指對于一個問題的解在一定范圍或區域內最優,或者說解決問題或達成目標的手段在一定范圍或限制內最優,我們顯然更希望得到全域最優解而不是區域最優解:
??
??在梯度下降的程序中,如果落入區域最優解之中,將會陷入其中無法脫出,根據上圖我們可以很清晰地發現,區域最優解處正是 f ′ ( x ) = 0 f'(x) = 0 f′(x)=0??? 的臨界點,此時的導數無法提供往哪個方向移動的資訊,一個 區域極小點(local minimum)意味著這個點的 f ( x ) f(x) f(x)??? 小于所有鄰近點,因此不可能通過移動無窮小的步長來減小 f ( x ) f(x) f(x)???,一個 區域極大點(local maximum)意味著這個點的 f ( x ) f(x) f(x)??? 大于所有鄰近點,因此不可能通過移動無窮小的步長來增大 f ( x ) f(x) f(x)????,更可怕的是,有些臨界點既不是最小點也不是最大點,由于這個臨界點特殊的地形,同樣會導致梯度下降演算法被困在其中,這些點被稱為 鞍點(saddle point),各種臨界點如下圖所示:
??
話題 11 :訓練程序中如何避免陷入區域最優解?如何逃離鞍點?
我們在訓練的程序中,肯定想要避免陷入區域最優解,及時逃離鞍點,對于梯度下降演算法而言,可以通過自適應學習率、動量等方法進行優化,進而衍生出了各種優化演算法如:Adagrad、RMSprop、stochastic GD(SGD)等方法,他們逃離鞍點的效果如下圖所示:
??
我們將在 《繁凡的深度學習筆記》第 7 章 過擬合、優化演算法與引數優化 7.9 優化演算法 中對這些拓展的優化演算法進行進一步的深入探討,
2.2.2.1.1 Jacobian 和 Hessian 矩陣(選學)
我們將在 《繁凡的深度學習筆記》第 7 章 過擬合、優化演算法與引數優化 7.9 優化演算法 中更進一步地深入探討梯度下降演算法,并對Jacobian 和 Hessian 矩陣進行詳細講解,
2.2.2.1.2 有限差分法與對稱導數法估計梯度大小(選學)
話題 12 : 趣味話題:有時候我們沒辦法直接計算梯度該怎么辦呢?可以嘗試估計梯度大小嗎?- 有限差分法與對稱導數法(選學)
? ? ?\, ??有限差分法
??在數學中,有限差分法(finite-difference methods,FDM),是一種微分方程數值方法,是通過有限差分來近似導數,從而尋求微分方程的近似解,有時我們不能直接獲取梯度值,就可以使用有限差分法,根據導數的定義,取極限的方法來獲得對梯度的估計,
? ? ?\, ?有限差分法的推導
??首先假設要近似函式的各級導數都有良好的性質,依照泰勒定理,可以形成以下的泰勒展開式:
f
(
x
0
+
h
)
=
f
(
x
0
)
+
f
′
(
x
0
)
1
!
h
+
f
(
2
)
(
x
0
)
2
!
h
2
+
?
+
f
(
n
)
(
x
0
)
n
!
h
n
+
R
n
(
x
)
,
(2.23)
f(x_{0}+h)=f(x_{0})+{\frac {f'(x_{0})}{1!}}h+{\frac {f^{{(2)}}(x_{0})}{2!}}h^{2}+\cdots +{\frac {f^{{(n)}}(x_{0})}{n!}}h^{n}+R_{n}(x),\tag{2.23}
f(x0?+h)=f(x0?)+1!f′(x0?)?h+2!f(2)(x0?)?h2+?+n!f(n)(x0?)?hn+Rn?(x),(2.23)
其中
n
!
n!
n!?????? 表示是
n
n
n??? 的階乘,
R
n
(
x
)
Rn(x)
Rn(x)? 為余數,表示泰勒多項式和原函式之間的差,可以推導函式
f
f
f 一階導數的近似值:
f
(
x
0
+
h
)
=
f
(
x
0
)
+
f
′
(
x
0
)
h
+
R
1
(
x
)
,
(2.24)
f(x_{0}+h)=f(x_{0})+f'(x_{0})h+R_{1}(x),\tag{2.24}
f(x0?+h)=f(x0?)+f′(x0?)h+R1?(x),(2.24)
設定
x
0
=
a
x_0=a
x0?=a,可得:
f
(
a
+
h
)
=
f
(
a
)
+
f
′
(
a
)
h
+
R
1
(
x
)
,
(2.25)
f(a+h)=f(a)+f'(a)h+R_{1}(x),\tag{2.25}
f(a+h)=f(a)+f′(a)h+R1?(x),(2.25)
除以
h
h
h 可得:
f
(
a
+
h
)
h
=
f
(
a
)
h
+
f
′
(
a
)
+
R
1
(
x
)
h
(2.26)
{f(a+h) \over h}={f(a) \over h}+f'(a)+{R_{1}(x) \over h}\tag{2.26}
hf(a+h)?=hf(a)?+f′(a)+hR1?(x)?(2.26)
求解
f
′
(
a
)
f'(a)
f′(a):
f
′
(
a
)
=
f
(
a
+
h
)
?
f
(
a
)
h
?
R
1
(
x
)
h
(2.27)
f'(a)={f(a+h)-f(a) \over h}-{R_{1}(x) \over h}\tag{2.27}
f′(a)=hf(a+h)?f(a)??hR1?(x)?(2.27)
假設
R
1
(
x
)
{\displaystyle R_{1}(x)}
R1?(x) 相當小,因此可以將 “f” 的一階導數近似為:
f
′
(
a
)
≈
f
(
a
+
h
)
?
f
(
a
)
h
.
(2.28)
f'(a)\approx {f(a+h)-f(a) \over h}.\tag{2.28}
f′(a)≈hf(a+h)?f(a)?.(2.28)
?
?
?\,
?對稱導數
??在數學中,對稱導數(symmetric derivative)是對普通導數的推廣,它被定義為:
lim
?
h
→
0
f
(
x
+
h
)
?
f
(
x
h
)
2
h
.
(2.29)
{\displaystyle \lim _{h\to 0}{\frac {f(x+h)-f(xh)}{2h}}.}\tag{2.29}
h→0lim?2hf(x+h)?f(xh)?.(2.29)
極限下的運算式有時稱為對稱差商(symmetric difference quotient.),如果函式的對稱導數存在于該點, 則稱該函式在點
x
x
x? 處 對稱可微, 如果一個函式在一點上是可微的(在通常意義上),那么它也是對稱可微的,但反之則不成立,
? ? ?\, ??二階對稱導數
??二階對稱導數定義為
lim
?
h
→
0
f
(
x
+
h
)
?
2
f
(
x
)
+
f
(
x
h
)
h
2
.
(2.30)
{\displaystyle \lim _{h\to 0}{\frac {f(x+h)-2f(x)+f(xh)}{h^{2}}}.}\tag{2.30}
h→0lim?h2f(x+h)?2f(x)+f(xh)?.(2.30)
如果存在(通常的)二階導數,則二階對稱導數存在并且等于它,然而,即使(普通)二階導數不存在,二階對稱導數也可能存在,例如,考慮符號函式
sgn
?
(
x
)
{\displaystyle \operatorname {sgn}(x)}
sgn(x),其定義為
sgn
?
(
x
)
=
{
?
1
if
x
<
0
,
0
if
x
=
0
,
1
if
x
>
0.
(2.31)
{\displaystyle \operatorname {sgn}(x)={\begin{cases}-1&{\text{if }}x<0,\\0&{\text{if }}x=0,\\1&{\text{if }}x>0.\end{cases}}}\tag{2.31}
sgn(x)=???????101?if x<0,if x=0,if x>0.?(2.31)
符號函式在零處不連續,因此對于
x
=
0
{\displaystyle x=0}
x=0 不存在,但是二階對稱導數存在于
x
=
0
{\displaystyle x=0}
x=0 :
lim
?
h
→
0
sgn
?
(
0
+
h
)
?
2
sgn
?
(
0
)
+
sgn
?
(
0
?
h
)
h
2
=
lim
?
h
→
0
sgn
?
(
h
)
?
2
?
0
+
(
?
sgn
?
(
h
)
)
h
2
=
lim
?
h
→
0
0
h
2
=
0.
(2.32)
{\displaystyle \lim _{h\to 0}{\frac {\operatorname {sgn}(0+h)-2\operatorname {sgn}(0)+\operatorname {sgn}(0-h)}{h ^{2}}}=\lim _{h\to 0}{\frac {\operatorname {sgn}(h)-2\cdot 0+(-\operatorname {sgn}(h))}{h^{ 2}}}=\lim _{h\to 0}{\frac {0}{h^{2}}}=0.}\tag{2.32}
h→0lim?h2sgn(0+h)?2sgn(0)+sgn(0?h)?=h→0lim?h2sgn(h)?2?0+(?sgn(h))?=h→0lim?h20?=0.(2.32)
? ? ?\, ?估計梯度
??在論文 CCS 2017 ZOO: Zeroth Order Optimization Based Black-box Attacks to Deep Neural Networks without Training Substitute Models[14]中,對于待攻擊的黑盒模型,無法獲得被攻擊模型的損失函式的梯度 ? x L ( x , y ) \nabla_xL(x,y) ?x?L(x,y) ,作者提出可以使用有限差分法來估計梯度,
??首先我們先對輸入
x
x
x??? 進行擾動:
x
=
x
+
h
×
e
x=x+h\times e
x=x+h×e???,其中常量
h
=
0.0001
h=0.0001
h=0.0001???,
e
e
e??? 是標準單位向量,記模型的輸出為
f
(
x
)
f(x)
f(x) ,文中利用對稱差商得到梯度的估計值:
g
^
i
:
=
?
f
(
x
)
?
x
i
≈
f
(
x
+
h
e
i
)
?
f
(
x
?
h
e
i
)
2
h
(2.33)
\hat{g}_{i}:=\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}_{i}} \approx \frac{f\left(\mathbf{x}+h \mathbf{e}_{i}\right)-f\left(\mathbf{x}-h \mathbf{e}_{i}\right)}{2 h }\tag{2.33}
g^?i?:=?xi??f(x)?≈2hf(x+hei?)?f(x?hei?)?(2.33)
在增加一次查詢之后即可獲得二階資訊:
h
^
i
:
=
?
2
f
(
x
)
?
x
i
i
2
≈
f
(
x
+
h
e
i
)
?
2
f
(
x
)
+
f
(
x
?
h
e
i
)
h
2
(2.34)
\hat{h}_{i}:=\frac{\partial^{2} f(\mathbf{x})}{\partial \mathbf{x}_{i i}^{2}} \approx \frac{f\left(\mathbf{x}+h \mathbf{e}_{i}\right)-2 f(\mathbf{x})+f\left(\mathbf{x}-h \mathbf{e}_{i}\right)}{h^{2}}\tag{2.34}
h^i?:=?xii2??2f(x)?≈h2f(x+hei?)?2f(x)+f(x?hei?)?(2.34)
獲得了這兩個梯度估計值以后,即可直接對
x
x
x 進行梯度下降優化,
利用牛頓法:
x
=
x
?
η
g
~
h
~
(2.35)
x=x-\eta \frac{\tilde{g}}{\tilde{h}}\tag{2.35}
x=x?ηh~g~??(2.35)
其中
η
\eta
η? 是學習率(步長),
實作的偽代碼如下圖所示:
??
??論文 ICLR 2019 Prior convictions: Black-box adversarial attacks with bandits and priors. [15] 中提出使用有限差分法估計某個函式
f
f
f? 在向量
v
v
v? 方向上的點
x
x
x? 處的方向導數
D
v
f
(
x
)
=
?
?
x
f
(
x
)
,
v
?
D_{v} f(x)=\left\langle\nabla_{x} f(x), v\right\rangle
Dv?f(x)=??x?f(x),v?? 為:
D
v
f
(
x
)
=
?
?
x
f
(
x
)
,
v
?
≈
(
f
(
x
+
δ
v
)
?
f
(
x
)
)
δ
(2.36)
D_{v} f(x)=\left\langle\nabla_{x} f(x), v\right\rangle \approx \dfrac {(f(x+\delta v)-f(x))}{\delta}\tag{2.36}
Dv?f(x)=??x?f(x),v?≈δ(f(x+δv)?f(x))?(2.36)
δ
>
0
\delta > 0
δ>0???? 為步長,控制梯度估計的質量, 由于精度和噪聲等問題,步長更小會得到更準確的估計,但同時也會降低可靠性, 因此,在實踐中,將
δ
\delta
δ???? 作為一個可調引數使用,
我們使用有限差分來構建梯度的估計,可以通過使用所有標準基向量
e
1
,
.
.
.
,
e
d
e_1,... , e_d
e1?,...,ed?????? 估計梯度的內積來找到梯度的
d
d
d????? 個分量:
?
^
x
L
(
x
,
y
)
=
∑
k
=
1
d
e
k
(
L
(
x
+
δ
e
k
,
y
)
?
L
(
x
,
y
)
)
δ
≈
∑
k
=
1
d
e
k
?
?
x
L
(
x
,
y
)
,
e
k
?
(2.37)
\widehat{\nabla}_{x} L(x, y)=\sum_{k=1}^{d} e_{k}\dfrac {\left(L\left(x+\delta e_{k}, y\right)-L(x, y)\right)}{\delta} \approx \sum_{k=1}^{d} e_{k}\left\langle\nabla_{x} L(x, y), e_{k}\right\rangle\tag{2.37}
?
x?L(x,y)=k=1∑d?ek?δ(L(x+δek?,y)?L(x,y))?≈k=1∑d?ek???x?L(x,y),ek??(2.37)
2.2.2.2 最小二乘法
話題 13 :什么是最小二乘法?如何使用最小二乘法解決線性回歸問題?
? ? ?\, ?最小二乘法?
??最小二乘法是由勒讓德在19世紀發現的,形式如下式:
標 函 數 = ∑ ( 觀 測 值 ? 理 論 值 ) 2 (2.38) 標函式=\sum(觀測值-理論值)^2\tag{2.38} 標函數=∑(觀測值?理論值)2(2.38)
觀測值就是我們的多組樣本,理論值就是我們的假設擬合函式,目標函式也就是在機器學習中常說的損失函式,我們的目標是得到使目標函式最小化時候的擬合函式的模型,
??舉一個最簡單的線性回歸的簡單例子,比如我們有 m m m 個只有一個特征的樣本: ( x i , y i ) , i ∈ [ 1 , m ] (x_i,y_i),i\in[1,m] (xi?,yi?),i∈[1,m]?,樣本采用一般的 f θ f_{\theta} fθ? 為次 n n n 的多項式擬合, f θ = θ 0 + θ 1 x + θ 2 x 2 + ? + θ n x n f_{\theta}=\theta_0+\theta_1x+\theta_2x^2+\cdots+\theta_nx^n fθ?=θ0?+θ1?x+θ2?x2+?+θn?xn,其中 θ i , i ∈ [ 1 , m ] \theta_i,i\in[1,m] θi?,i∈[1,m]? 為引數,最小二乘法就是要找到一組 θ i , i ∈ [ 1 , m ] \theta_i,i\in[1,m] θi?,i∈[1,m]? 使得 ∑ i = 1 n ( f θ ( x i ) ? y i ) 2 \displaystyle \sum_{i=1}^{n}(f_{\theta}(x_i)-y_i)^2 i=1∑n?(fθ?(xi?)?yi?)2? 最小,即求解 min ? { ∑ i = 1 n ( f θ ( x i ) ? y i ) 2 } \min\{\displaystyle \sum_{i=1}^{n}(f_{\theta}(x_i)-y_i)^2\} min{i=1∑n?(fθ?(xi?)?yi?)2}?? ,
??我們發現這是一個二次函式,我們對其求導,在導數為 0 0 0 的時候取得最小值即可,
??回到我們之前討論的神經元問題,求解 w w w 和 b b b 是使損失函式最小化的程序,在統計中,稱為線性回歸模型的最小二乘引數估計 (parameter estimation),我們可以將 L ( w , b ) \mathcal{L}(w,b) L(w,b) 分別對 w w w 和 b b b 求偏導,得到:
? L ? w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b ? y ( i ) ) ? ? ( w x ( i ) + b ? y ( i ) ) ? w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b ? y ( i ) ) ? x ( i ) = 2 n ∑ i = 1 n ( w x ( i ) + b ? y ( i ) ) ? x ( i ) (2.39) \begin{aligned}\frac{\partial \mathcal{L}}{\partial w}&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial w} &\\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)} &\\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)}\end{aligned}\tag{2.39} ?w?L??=n1?i=1∑n?2(wx(i)+b?y(i))??w?(wx(i)+b?y(i))?=n1?i=1∑n?2(wx(i)+b?y(i))?x(i)=n2?i=1∑n?(wx(i)+b?y(i))?x(i)??(2.39)
以及
? L ? b = ? 1 n ∑ i = 1 n ( w x ( i ) + b ? y ( i ) ) 2 ? b = 1 n ∑ i = 1 n ? ( w x ( i ) + b ? y ( i ) ) 2 ? b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b ? y ( i ) ) ? ? ( w x ( i ) + b ? y ( i ) ) ? b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b ? y ( i ) ) ? 1 = 2 n ∑ i = 1 n ( w x ( i ) + b ? y ( i ) ) (2.40) \begin{aligned}\dfrac{\partial \mathcal{L}}{\partial b}&=\dfrac{\displaystyle \partial \dfrac{1}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b}\\&=\frac{1}{n} \sum_{i=1}^{n} \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b} &\\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial b} &\\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot 1 &\\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)\end{aligned}\tag{2.40} ?b?L??=?b?n1?i=1∑n?(wx(i)+b?y(i))2?=n1?i=1∑n??b?(wx(i)+b?y(i))2?=n1?i=1∑n?2(wx(i)+b?y(i))??b?(wx(i)+b?y(i))?=n1?i=1∑n?2(wx(i)+b?y(i))?1=n2?i=1∑n?(wx(i)+b?y(i))??(2.40)
令上述兩式為 0 0 0?,即可得到 w w w? 和 b b b? 最優解的閉式(closed-form)解,
? ? ?\, ?最小二乘法的矩陣法解法(選學)
??最小二乘法的代數法解法就是對 θ i \theta_i θi? 求偏導數,令偏導數為 0,再解方程組,得到 θ i \theta_i θi?,矩陣法比代數法要簡潔,
??這里用多元線性回歸例子來描述:假設函式
f
θ
(
x
1
,
x
2
,
…
,
x
n
)
=
θ
0
+
θ
1
x
1
+
?
+
θ
n
x
n
f_{\theta}(x_1,x_2,\dots,x_n)=\theta_0+\theta_1x_1+\cdots+\theta_nx_n
fθ?(x1?,x2?,…,xn?)=θ0?+θ1?x1?+?+θn?xn? 的矩陣表達方式為:
f
θ
(
X
)
=
X
θ
(2.41)
f_{\theta}(\boldsymbol X)=\boldsymbol X\theta\tag{2.41}
fθ?(X)=Xθ(2.41)
??其中, 假設函式 f θ ( X ) = X θ f_{\theta}(\boldsymbol X)=\boldsymbol X\theta fθ?(X)=Xθ 為 m × 1 m\times 1 m×1 的向量, θ \theta θ 為 n × 1 n\times 1 n×1的向量,里面有 n n n 個代數法的模型引數, X \boldsymbol X X 為 n × m n\times m n×m 維的矩陣, m m m 代表樣本的個數, n n n 代表樣本的特征數,
損失函式定義為
g
(
θ
)
=
1
2
(
X
θ
?
Y
)
T
(
X
θ
?
Y
)
(2.42)
g({\theta}) = \dfrac 1 2(\boldsymbol X\theta-\boldsymbol Y)^\mathrm{T}(\boldsymbol X\theta-\boldsymbol Y)\tag{2.42}
g(θ)=21?(Xθ?Y)T(Xθ?Y)(2.42)
??其中 Y \boldsymbol {Y} Y 是樣本的輸出向量,維度為 m × 1 m\times 1 m×1, 1 2 \dfrac 1 2 21? 在這主要是為了求導后系數為 1 1 1,方便計算,
??根據最小二乘法的原理,我們要對這個損失函式對
θ
\theta
θ 向量求導取
0
0
0,結果如下式:
?
g
(
θ
)
?
θ
=
X
T
(
X
θ
?
Y
=
0
(2.43)
\dfrac {\partial g(\theta)}{\partial \theta}=\boldsymbol {X}^{\mathrm{T}}(\boldsymbol {X}\theta-\boldsymbol {Y}=0\tag{2.43}
?θ?g(θ)?=XT(Xθ?Y=0(2.43)
整理可得:
θ
=
(
X
T
X
)
?
1
X
T
Y
(2.44)
\theta=(\boldsymbol {X}^{\mathrm T}\boldsymbol {X})^{-1}\boldsymbol {X}^{\mathrm{T}}\boldsymbol {Y}\tag{2.44}
θ=(XTX)?1XTY(2.44)
? ? ?\, ?最小二乘法的局限性和適用場景
-
最小二乘法需要計算 X T X \boldsymbol {X}^{\mathrm{T}}\boldsymbol {X} XTX 的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了,此時梯度下降法仍然可以使用,當然,我們可以通過對樣本資料進行整理,去掉冗余特征,讓 X T X \boldsymbol {X}^{\mathrm{T}}\boldsymbol {X} XTX 的行列式不為 0 0 0 ,然后繼續使用最小二乘法,
-
當樣本特征 n n n 非常的大的時候,計算 X T X {\boldsymbol X}^{\mathrm{T}}\boldsymbol {X} XTX 的逆矩陣是一個非常耗時的作業( n × n n\times n n×n 的矩陣求逆),甚至不可行,而此時以梯度下降為代表的迭代法仍然可以使用,有時可以通過主成分分析降低特征的維度后再用最小二乘法,
-
如果擬合函式不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍然可以用,
2.2.3 神經元線性模型實戰
話題 14 :道理我都懂,怎么用代碼實作并解決神經元線性模型呢?
??在理解了神經元線性模型的原理以及各種優化演算法以后,我們來實戰訓練單輸入神經元線性模型,
??首先我們引入需要的包,
In [ 1 ] : \text { In }[1]: In [1]:
import numpy as np
import math
# cal y = 1.477x + 0.089 + epsilon,epsilon ~ N(0, 0.01^2)
1. 生成資料集
??我們需要采樣自真實模型的多組資料,對于已知真實模型的 玩具樣例 (Toy Example),我們直接從指定的
w
=
1.477
,
b
=
0.089
w = 1.477 , b = 0.089
w=1.477,b=0.089 的真實模型中直接采樣:
y
=
1.477
×
x
+
0.089
(2.45)
y=1.477 \times x+0.089\tag{2.45}
y=1.477×x+0.089(2.45)
??為了能夠很好地模擬真實樣本的觀測誤差,我們給模型添加誤差自變數
?
\epsilon
? ,它采樣自均值為
0
0
0 ,方差為
0.01
0.01
0.01 的高斯分布:
y
=
1.477
x
+
0.089
+
?
,
?
~
N
(
0
,
0.01
)
(2.46)
y=1.477 x+0.089+\epsilon, \epsilon \sim \mathcal{N}(0,0.01)\tag{2.46}
y=1.477x+0.089+?,?~N(0,0.01)(2.46)
??我們通過隨機采樣 n = 100 n = 100 n=100 次,我們獲得 n n n 個樣本的訓練資料集 D t r a i n \mathbb D_{\mathrm{train}} Dtrain? ,然后回圈進行 100 100 100 次采樣,每次從均勻分布 U ( ? 10 , 10 ) U ( -10,10) U(?10,10) 中隨機采樣一個資料 x x x 同時從均值為 0 0 0 ,方差為
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419996.html
標籤:AI
下一篇:【頂會學習計劃】萬字吃透NER
- 標籤雲
-
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)
- 熱門瀏覽
-
-
如何從xshell上傳檔案到centos linux虛擬機里
如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......
uj5u.com 2020-09-10 02:00:47 more -
一、SQLMAP入門
一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......
uj5u.com 2020-09-10 02:00:50 more -
Metasploit 簡單使用教程
metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......
uj5u.com 2020-09-10 02:00:53 more -
游戲逆向之驅動層與用戶層通訊
驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......
uj5u.com 2020-09-10 02:00:56 more -
北斗電力時鐘(北斗授時服務器)讓網路資料更精準
北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......
uj5u.com 2020-09-10 02:01:03 more -
【CTF】CTFHub 技能樹 彩蛋 writeup
?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......
uj5u.com 2020-09-10 02:04:05 more -
02windows基礎操作
我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......
uj5u.com 2020-09-10 02:04:18 more -
03.Linux基礎操作
我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......
uj5u.com 2020-09-10 02:04:30 more
- 最新发布
-
-
2023年最新微信小程式抓包教程
01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......
uj5u.com 2023-04-20 08:48:24 more -
web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包
Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......
uj5u.com 2023-04-20 08:47:46 more -
vulnhub_Earth
前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......
uj5u.com 2023-04-20 07:46:20 more -
從4k到42k,軟體測驗工程師的漲薪史,給我看哭了
清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......
uj5u.com 2023-04-20 07:44:00 more -
最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇
🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......
uj5u.com 2023-04-20 07:43:36 more -
漫談前端自動化測驗演進之路及測驗工具分析
隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......
uj5u.com 2023-04-20 07:43:16 more -
CANN開發實踐:4個DVPP記憶體問題的典型案例解讀
摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......
uj5u.com 2023-04-20 07:43:03 more -
Halcon軟體安裝與界面簡介
1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......
uj5u.com 2023-04-20 07:42:17 more -
在MacOS下使用Unity3D開發游戲
第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......
uj5u.com 2023-04-20 07:40:19 more
-
- 友情鏈接
