神經網路學習要求大量的資料和很多引數我們乙個如何選擇和優化他們呢,我們接下來將介紹一下網路優化引數
神經網路中的每個神經元節點接受上一層神經元的輸出值作為本神經元的輸入值,並將輸入值傳遞給下一層,輸入層神經元節點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經網路中,上層節點的輸出和下層節點的輸入之間具有乙個函式關係,這個函式稱為啟用函式。
由於前一篇部落格已經介紹過了啟用函式,所以不過多的解釋,大家可以看看下面這篇部落格
啟用函式
在機器學習中,我們通常會根據輸入 x來**輸出 y,**值和真實值之間會有一定的誤差,我們在訓練的過程中會使用優化器(optimizer)來最小化這個誤差。
優化方法在深度學習中是非常重要的,其中最常見的情形是利用目標函式的導數通過多次迭代來求解。
然後又幾種常見的最優化方法為梯度下降法,牛頓法,擬牛頓法和共軛梯度法。
在神經網路中,如果學習率很低,我們的訓練過程會更可靠,但是時間耗費會更久。
如果學習率過大,訓練中的權重可能變化大,使優化在最小值波動。
因此選擇乙個合適的學習率,可以大大提高訓練模型過程中的效率。
我們就先來了解一下梯度下降法這個優化方法,看到這個詞,大家是否有些熟悉呢,好像在**見的樣子。確實作者最近在高數中就學到過,然後由於上課沒認真聽,現在也有點忘記了。
我們來舉個簡單的例子
比如在一場下坡比賽中,我們為了最快到達底部頂點,就必須走最陡峭的地方,以最短的時間到達。
差不多就是首先以他當前的所處的位置為基準,尋找這個位置最陡峭的地方,然後朝著下降方向走一步,然後又繼續以當前位置為基準,再找最陡峭的地方,再走直到最後到達最低處;
因此梯度下降法又叫作**「最速下降法」**,是不是很形象呢。
我們再來理解這個定義就簡單一些
梯度下降法的計算過程就是沿梯度下降的方向求解極小值(也可以沿梯度上公升方向求解極大值)
梯度下降步驟
梯度下降法越接近目標值的時候,需要的步長越短,前進越慢,否則會越過最優點。
然後**值與真實值之間有個誤差,我們設定誤差函式l(w)
梯度下降法分類
隨機梯度下降法:
每次取乙個樣本進行梯度的計算,它的問題是梯度計算相對不穩定,但是整體上還是趨於全域性最優解的。
損失函式
更新方式
批量梯度下降法
就是使用所有的訓練資料計算梯度,梯度計算穩定,可以得到全域性最優解,但是計算速度很慢。
損失函式
更新方式
**分析
from numpy import
*import matplotlib.pyplot as plt
# 資料集:給20個資料點
m =20
# x的座標以及對應的矩陣
x1 = ones(
(m,1))
# 生成乙個m行1列的向量,也就是x1全是1
x2 = arange(
1, m+1)
.reshape(m,1)
# 生成乙個m行1列的向量,也就是x1,從1到m
# 對應的y座標
y = array([3
,4,5
,5,2
,4,7
,8,11
,8,12
,11,13
,13,16
,17,18
,17,19
,21])
.reshape(m,1)
# 定義損失函式函式,大家可以根據前面的公式
defloss_function
(theta, x, y)
: diff = dot(x, theta)
- y # dot() 陣列需要像矩陣那樣相乘,就需要用到dot()
loss=(1
/(2*m)
)* dot(diff.transpose(
), diff)
return loss
# 定義損失函式對應的梯度函式,對w求導,寫出向量的形式
defgradient_function
(theta, x, y)
: diff = dot(x, theta)
- y gradient=(1
/m)* dot(x.transpose(
), diff)
return gradient
# 梯度下降迭代, 因為資料較少,直接用批量梯度下降法
defgradient_descent
(x, y, alpha)
: theta = array([1
,1])
.reshape(2,
1)gradient = gradient_function(theta, x, y)
while
notall
(abs
(gradient)
<=1e-
5): theta = theta - alpha * gradient
gradient = gradient_function(theta, x, y)
return theta
optimal = gradient_descent(x, y, alpha)
print
('optimal:'
, optimal)
print
('loss function:'
, loss_function(optimal, x, y)[0
][0]
)# 根據資料畫出對應的影象
defplot
(x, y, theta):
ax = plt.subplot(
111)
# 使用plt.subplot來建立小圖. plt.subplot(111)表示將整個影象視窗分為1行1列, 當前位置為1
ax.scatter(x, y, s=
30, c=
"red"
, marker=
"s")
plt.xlabel(
"x")
plt.ylabel(
"y")
x = arange(0,
21,0.2)
# x的範圍
y = theta[0]
+ theta[1]
*x ax.plot(x, y)
plt.show(
)plot(x2, y, optimal)
**借鑑 **
這次我們就先到這裡,我們下次在學其他的網路優化引數
謝謝大家的**!!!
神經網路優化(一)
使用反向傳播演算法和梯度下降演算法調整神經 網路中引數的取值。神經網路的優化過程分為兩個階段 1.1第一階段 先通過前向傳播演算法計算得到 值,並將 值和真實值做對比得出兩者之間的差距。1.2第二階段 通過反向傳播演算法計算損失函式對每乙個引數的梯度,再根據梯度和學習率使用梯度下降演算法更新每乙個引...
神經網路優化(一)
一 損失函式 loss 前向傳播的 值y與已知答案y 的差距 1.優化目標 使loss達到最小值。2.優化方法 均方誤差 mse 交叉熵 ce 自定義詳解 1.均方誤差mse 公式 函式 loss mse tf.reduce mean tf.square y y tf.reduce mean x 表...
卷積神經網路引數優化策略(二)
欠擬合與過擬合問題是機器學習中的經典問題,儘管相關的討論和預防方法非常多,但目前在許多任務中仍經常會出現過擬合等問題,還沒有找到乙個十分通用 有效的解決方法。不過總體上看,現在人們常用的一些很簡潔的方法基本上能夠較好地解決欠擬合與過擬合問題,總結如下。欠擬合與過擬合的概念的成因比較簡單,觀點統一,這...