h5做網(wǎng)站b2b網(wǎng)站大全
文章目錄
- LeakyReLU
- 函數(shù)+導(dǎo)函數(shù)
- 函數(shù)和導(dǎo)函數(shù)圖像
- 優(yōu)缺點(diǎn)
- pytorch中的LeakyReLU函數(shù)
- tensorflow 中的LeakyReLU函數(shù)
LeakyReLU
- LeakyReLU: Leaky Rectified Linear Unit
函數(shù)+導(dǎo)函數(shù)
-
LeakyReLU
函數(shù)
L e a k y R e L U = { x x > = 0 p x x < 0 p ∈ ( 0 , 1 ) \rm Leaky{ReLU} = \left\{ \begin{array}{} x \quad x>=0 \\ px \quad x<0 \end{array} \right. \quad p \in (0,1) LeakyReLU={xx>=0pxx<0?p∈(0,1) -
LeakyReLU
函數(shù)導(dǎo)數(shù)
d d x L e a k y R e L U = { 1 x ≥ 1 p x < 0 p ∈ ( 0 , 1 ) \fracvxwlu0yf4{dx} \rm LeakyReLU = \left\{ \begin{array}{} 1 \quad x \ge1 \\ p \quad x < 0 \end{array} \right. \quad p \in (0,1) dxd?LeakyReLU={1x≥1px<0?p∈(0,1)
它和 ReLU 函數(shù)的不同之處在于,當(dāng) x 小于零時(shí),LeakyReLU 函數(shù)的導(dǎo)數(shù)值并不為 0,而 是常數(shù)𝑝,p 一般設(shè)置為某較小的數(shù)值,如 0.01 或 0.02
函數(shù)和導(dǎo)函數(shù)圖像
-
畫(huà)圖
下面是的 p = 0.5 p=0.5 p=0.5 時(shí)候的情況,請(qǐng)注意,p 一般設(shè)置為較小值。
import numpy as np from matplotlib import pyplot as plt# 定義 PReLU 函數(shù) def prelu(x, alpha=0.25):return np.where(x < 0, alpha * x, x)# 定義 PReLU 的導(dǎo)數(shù) def prelu_derivative(x, alpha=0.25):d = np.where(x < 0, alpha, 1)return d# 生成數(shù)據(jù) x = np.linspace(-2, 2, 1000) alpha = 0.5 # 可以調(diào)整 alpha 的值 y = prelu(x, alpha) y1 = prelu_derivative(x, alpha)# 繪制圖形 plt.figure(figsize=(12, 8)) ax = plt.gca() plt.plot(x, y, label='PReLU') plt.plot(x, y1, label='Derivative') plt.title(f'PReLU (alpha={alpha}) and Partial Derivative')# 設(shè)置上邊和右邊無(wú)邊框 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')# 設(shè)置 x 坐標(biāo)刻度數(shù)字或名稱(chēng)的位置 ax.xaxis.set_ticks_position('bottom')# 設(shè)置邊框位置 ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0))plt.legend(loc=2) plt.show()
?
LeakyReLU 函數(shù)有效的克服了 ReLU 函數(shù)的缺陷,使用也比較廣泛。
優(yōu)缺點(diǎn)
-
Leaky Relu 的優(yōu)點(diǎn)(相對(duì) ReLU的改進(jìn))
- 與 ReLU 函數(shù)相比,Leaky ReLU 通過(guò)在負(fù)半軸引入一個(gè)小的線(xiàn)性分量(如 0.01x)來(lái)調(diào)整負(fù)值的梯度問(wèn)題;這有助于擴(kuò)大 ReLU 函數(shù)的范圍,通常斜率 p 的值為 0.01 左右;函數(shù)范圍是負(fù)無(wú)窮到正無(wú)窮。
- Leaky ReLU 激活函數(shù)通過(guò)在負(fù)半軸添加一個(gè)小的正斜率(如 0.01),使得負(fù)軸的信息不會(huì)全部丟失。通過(guò)這種方式,Leaky ReLU 激活函數(shù)可以確保模型訓(xùn)練過(guò)程中神經(jīng)元的權(quán)重在輸入小于 0 的情況下依然會(huì)得到更新。
- 不會(huì)出現(xiàn) Dead ReLU 問(wèn)題,但關(guān)于輸入函數(shù) f(x)的部分仍然容易出現(xiàn)梯度爆炸的情況,因此必要時(shí)可以搭配 Sigmoid 或 Tanh 使用。
-
Leaky Relu 的缺點(diǎn)
- 經(jīng)典(以及廣泛使用的)ReLU 激活函數(shù)的變體,帶泄露修正線(xiàn)性單元(Leaky ReLU)的輸出對(duì)負(fù)值輸入有很小的坡度。由于導(dǎo)數(shù)總是不為零,這能減少靜默神經(jīng)元的出現(xiàn),允許基于梯度的學(xué)習(xí)(雖然會(huì)很慢)。
- 從理論上講,Leaky ReLU 具有 ReLU 的所有優(yōu)點(diǎn),而且 Dead ReLU 不會(huì)有任何問(wèn)題,但在實(shí)際應(yīng)用中,尚未完全證明 Leaky ReLU 總是比 ReLU 更好。
pytorch中的LeakyReLU函數(shù)
-
代碼
import torchx = torch.randn(2) f = torch.nn.LeakyReLU(negative_slope=0.1) # negative_slope是個(gè)常數(shù),即負(fù)值部分的斜率leakyRelu_x = f(x)print(f"x: \n{x}") print(f"leakyRelu_x:\n{leakyRelu_x}")"""輸出""" x: tensor([-1.7098, 0.3351]) leakyRelu_x: tensor([-0.1710, 0.3351])
為了便于演示,這里的
p
設(shè)置成了0.1
,即代碼中的negative_slope
,我們可以看到輸出,當(dāng)x小于0 的時(shí)候,leakyRelu_x的結(jié)果被乘以0.1。
tensorflow 中的LeakyReLU函數(shù)
-
代碼
python: 3.10.9
tensorflow: 2.18.0
import tensorflow as tfalpha = 0.1 # 定義 LeakyReLU 函數(shù),alpha 是負(fù)值部分的斜率 f = lambda x: tf.nn.leaky_relu(x, alpha=alpha)x = tf.random.normal([2]) leaky_relu_x = f(x)print(f"x: \n{x}") print(f"leaky_relu_x:\n{leaky_relu_x}")"""輸出""" x: [-0.733668 0.06844683] leaky_relu_x: [-0.07336681 0.06844683]
同上,這里的
p
設(shè)置成了0.1
,即代碼中的alpha
,我們可以看到輸出,當(dāng)x小于0 的時(shí)候,leakyRelu_x的結(jié)果被乘以0.1。