動(dòng)易門戶網(wǎng)站價(jià)格新網(wǎng)站多久會(huì)被百度收錄
機(jī)器學(xué)習(xí)0-為什么Relu函數(shù)

文章目錄
- 機(jī)器學(xué)習(xí)0-為什么Relu函數(shù)
- @[toc]
- 1-手搓神經(jīng)網(wǎng)絡(luò)步驟總結(jié)
- 2-為什么要用Relu函數(shù)
- 3-進(jìn)行L1正則化
- 修改后的代碼
- 解釋
- 4-進(jìn)行L2正則化
- 解釋
- 注意事項(xiàng)
- 5-Relu激活函數(shù)多有夸張
- 1-細(xì)數(shù)Relu函數(shù)的5宗罪
- 2-Relu函數(shù)5宗罪詳述
- 6-那為什么要用這個(gè)Relu函數(shù)
- 7-文本分類情感分析任務(wù)激活
- 特征之間的關(guān)系
- 常用的激活函數(shù)
- 總結(jié)
- 8-專業(yè)詞匯解釋
文章目錄
- 機(jī)器學(xué)習(xí)0-為什么Relu函數(shù)
- @[toc]
- 1-手搓神經(jīng)網(wǎng)絡(luò)步驟總結(jié)
- 2-為什么要用Relu函數(shù)
- 3-進(jìn)行L1正則化
- 修改后的代碼
- 解釋
- 4-進(jìn)行L2正則化
- 解釋
- 注意事項(xiàng)
- 5-Relu激活函數(shù)多有夸張
- 1-細(xì)數(shù)Relu函數(shù)的5宗罪
- 2-Relu函數(shù)5宗罪詳述
- 6-那為什么要用這個(gè)Relu函數(shù)
- 7-文本分類情感分析任務(wù)激活
- 特征之間的關(guān)系
- 常用的激活函數(shù)
- 總結(jié)
- 8-專業(yè)詞匯解釋
1-手搓神經(jīng)網(wǎng)絡(luò)步驟總結(jié)
- 1)基于【預(yù)測(cè)值和真實(shí)值】最小的差別(使用最小二乘法)計(jì)算誤差值
- 2)如何求解【最小二乘法】的方法,分別針對(duì)w和b進(jìn)行求導(dǎo),計(jì)算方法叫做【梯度下降求解】->引入【迭代步數(shù)】+【學(xué)習(xí)率】的概念
- 3)為了解決多個(gè)神經(jīng)元的線性組合還是直線的問題進(jìn)行非線性變換(激活函數(shù))->引入ReLu等激活函數(shù),各取所長
- 4)OK,至此已經(jīng)完美的解決了【線性模型】+【誤差計(jì)算】+【梯度求解】+【非線性變化】的問題,直接可以得到我們的模型了
- 5)但是這樣的模型太過完美,導(dǎo)致計(jì)算的數(shù)據(jù)可能針對(duì)【訓(xùn)練和驗(yàn)證數(shù)據(jù)】太過完美,針對(duì)新數(shù)據(jù)預(yù)測(cè)不準(zhǔn)->引入【L1/L2正則】
2-為什么要用Relu函數(shù)
為什么一個(gè)小學(xué)生都會(huì)的函數(shù),可以解決神經(jīng)網(wǎng)絡(luò)中的梯度問題?
1)神經(jīng)網(wǎng)絡(luò)是基于線性組合進(jìn)行變換了,就會(huì)導(dǎo)致所有的線性函數(shù)不論經(jīng)過多少次變換都還是一個(gè)線性函數(shù)
2)OK,現(xiàn)在引入【非線性環(huán)變換-Relu函數(shù)】那么怎么解釋這幾個(gè)問題?
- 1)多個(gè)Relu函數(shù)線性變換到底是個(gè)什么鬼?->可以用python進(jìn)行繪制【曲線】->OK,y值經(jīng)過Relu(y)后再線性組合可以表示非線性問題
- 2)那為什么要用這個(gè)Relu函數(shù)?貌似我隨手寫一個(gè)函數(shù),sin、cos、tan、cot甚至我手寫一個(gè)只要不是直線的方程都可以實(shí)現(xiàn)【非線性變換】->答案:【生物學(xué)啟示】+【計(jì)算效率】
誠實(shí)一點(diǎn):別說太多玄乎的東西,就兩個(gè)核心點(diǎn)【老板親兒子->神經(jīng)網(wǎng)絡(luò)的生物學(xué)啟示】+【計(jì)算時(shí)偷懶->把負(fù)數(shù)置為0,這樣就不用計(jì)算負(fù)數(shù)部分的運(yùn)算(計(jì)算效率)】
其他【稀疏性】+【緩解梯度消失問題】->先說【緩解梯度消失問題】只要斜率為0大家都會(huì)梯度消失,sigmoid或tanh這樣的飽和非線性函數(shù)斜率會(huì)變?yōu)?,Relu函數(shù)在小于0時(shí),直接就全變?yōu)?(直接躺平,大家都梯度消失了,所以這個(gè)接口太牽強(qiáng)了)
再說【稀疏性】所謂的【稀疏性】說人話就是讓部分參數(shù)不參與計(jì)算(不激活),實(shí)現(xiàn)這個(gè)方式也太簡單了,我可以選擇跳過隨機(jī)參數(shù)或者其他的方式都行,所以這個(gè)接口也太牽強(qiáng)
- 3)OK,如果是【老板的兒子】當(dāng)然是選擇接納他啦,還能怎么辦!那Relu函數(shù)的主要負(fù)責(zé)什么場(chǎng)景,這樣我們遇到這些場(chǎng)景,趕緊找Relu函數(shù)去大展拳腳,秀一波肌肉?->【線性特征場(chǎng)景(一半是線性)】+【長文本的稀疏計(jì)算(數(shù)據(jù)置0保留核心)】+【深度神經(jīng)網(wǎng)絡(luò)(數(shù)據(jù)置0計(jì)算簡單)】
ReLU有一半是線性方程,可以很好的學(xué)習(xí)到線性特征;
因?yàn)楹唵卧谏疃壬窠?jīng)網(wǎng)絡(luò)的計(jì)算中可以有效計(jì)算;
文本分類和情感分析等任務(wù)中只有核心的要點(diǎn)關(guān)鍵字,使用RelU可以剔除沒有梯度變化的數(shù)據(jù)
- 4)OK,【老板的兒子】再有本事也得找?guī)褪诌M(jìn)行互補(bǔ),有沒有其他的激活函數(shù)也可以解決這些事情?-> 四大金剛:Sigmoid、ReLU、Tanh 和 Leaky ReLU
其他激活函的場(chǎng)景:https://mp.weixin.qq.com/s?__biz=Mzk0NDM4OTYyOQ==&mid=2247484448&idx=1&sn=f5ae1d222067f7125cba799742ee17d3&chksm=c32428b2f453a1a43a99d88b060f1366dde591afa1ed78825a978e83a4bb3fe1eac922ddd217&token=142243382&lang=zh_CN#rd
3-進(jìn)行L1正則化
在你的代碼中,你已經(jīng)實(shí)現(xiàn)了基本的梯度下降算法來擬合一個(gè)簡單的線性模型,并使用Sigmoid函數(shù)作為激活函數(shù)。為了防止過擬合,你可以通過添加L1正則化來限制模型的復(fù)雜度。L1正則化通過在損失函數(shù)中添加模型參數(shù)的絕對(duì)值之和來實(shí)現(xiàn)。
下面是如何在你的代碼中添加L1正則化的步驟:
- 定義正則化項(xiàng):在損失函數(shù)中添加L1正則化項(xiàng)。
- 修改梯度計(jì)算:在計(jì)算梯度時(shí),考慮正則化項(xiàng)的影響。
修改后的代碼
import numpy as np# 輸入數(shù)據(jù)
x_data = np.array([0, 1, 2, 3, 4])
y_data = np.array([0, 2, 4, 6, 8])# 初始化參數(shù)
m = 0
b = 0# 超參數(shù)
learning_rate = 0.01
epochs = 1000
lambda_l1 = 0.01 # L1正則化系數(shù)# Sigmoid激活函數(shù)
def sigmoid(x):return 1 / (1 + np.exp(-x))# Sigmoid的導(dǎo)數(shù)
def sigmoid_derivative(x):return sigmoid(x) * (1 - sigmoid(x))def compute_gradients(m, b, x, y, lambda_l1):N = len(x)z = m * x + by_pred = sigmoid(z) # 使用sigmoid作為激活函數(shù)error = y_pred - ydL_dy_pred = errordL_dz = dL_dy_pred * sigmoid_derivative(z) # 使用sigmoid的導(dǎo)數(shù)# 計(jì)算L1正則化的梯度dm_l1 = lambda_l1 * np.sign(m)db_l1 = lambda_l1 * np.sign(b)# 計(jì)算總的梯度dm = (2/N) * np.sum(dL_dz * x) + dm_l1db = (2/N) * np.sum(dL_dz) + db_l1return dm, dbfor epoch in range(epochs):dm, db = compute_gradients(m, b, x_data, y_data, lambda_l1)m = m - learning_rate * dmb = b - learning_rate * dbif epoch % 100 == 0:z = m * x_data + by_pred = sigmoid(z) # 使用sigmoid作為激活函數(shù)進(jìn)行預(yù)測(cè)loss = np.mean((y_pred - y_data)**2) + lambda_l1 * (abs(m) + abs(b)) # 添加L1正則化項(xiàng)print(f"Epoch {epoch}: m = {m}, b = {b}, loss = {loss}")print(f"Final equation: y = {m} * x + {b}")
解釋
-
正則化系數(shù)
lambda_l1
:這是一個(gè)超參數(shù),控制L1正則化的強(qiáng)度。較大的值會(huì)導(dǎo)致模型參數(shù)更接近于零,從而減少模型的復(fù)雜度。 -
正則化項(xiàng)的梯度:在
compute_gradients
函數(shù)中,我們添加了L1正則化的梯度dm_l1
和db_l1
。L1正則化的梯度是參數(shù)的符號(hào)函數(shù)np.sign(m)
和np.sign(b)
乘以正則化系數(shù)lambda_l1
。 -
損失函數(shù):在計(jì)算損失時(shí),我們添加了L1正則化項(xiàng)
lambda_l1 * (abs(m) + abs(b))
,這會(huì)使得模型參數(shù)的絕對(duì)值之和最小化。
通過這種方式,L1正則化可以幫助模型避免過擬合,尤其是在數(shù)據(jù)量較小或特征較多的情況下。
4-進(jìn)行L2正則化
你的代碼嘗試使用梯度下降算法通過線性回歸擬合線性數(shù)據(jù),并且使用了 Sigmoid 激活函數(shù)。然而,對(duì)于線性數(shù)據(jù),使用 Sigmoid 激活函數(shù)并不是最佳選擇,因?yàn)樗鼤?huì)將輸出壓縮到 0 和 1 之間,這可能導(dǎo)致?lián)p失函數(shù)值很高且收斂緩慢。
另外,你的代碼中沒有加入 L2 正則化來避免過擬合。為了在代碼中添加 L2 正則化,我們需要在損失函數(shù)中加入一個(gè)正則化項(xiàng),并在計(jì)算梯度時(shí)考慮這個(gè)項(xiàng)。L2 正則化項(xiàng)通常表示為參數(shù)的平方和乘以一個(gè)正則化系數(shù) λ。
以下是修改后的代碼,加入了 L2 正則化:
import numpy as np# 輸入數(shù)據(jù)
x_data = np.array([0, 1, 2, 3, 4])
y_data = np.array([0, 2, 4, 6, 8])# 初始化參數(shù)
m = 0
b = 0# 超參數(shù)
learning_rate = 0.01
epochs = 1000
lambda_reg = 0.1 # 正則化系數(shù)# Sigmoid激活函數(shù)
def sigmoid(x):return 1 / (1 + np.exp(-x))# Sigmoid的導(dǎo)數(shù)
def sigmoid_derivative(x):return sigmoid(x) * (1 - sigmoid(x))def compute_gradients(m, b, x, y, lambda_reg):N = len(x)z = m * x + by_pred = sigmoid(z) # 使用sigmoid作為激活函數(shù)error = y_pred - ydL_dy_pred = errordL_dz = dL_dy_pred * sigmoid_derivative(z) # 使用sigmoid的導(dǎo)數(shù)dm = (2/N) * np.sum(dL_dz * x) + (2 * lambda_reg * m / N) # 添加L2正則化項(xiàng)db = (2/N) * np.sum(dL_dz) + (2 * lambda_reg * b / N) # 添加L2正則化項(xiàng)return dm, dbfor epoch in range(epochs):dm, db = compute_gradients(m, b, x_data, y_data, lambda_reg)m = m - learning_rate * dmb = b - learning_rate * dbif epoch % 100 == 0:z = m * x_data + by_pred = sigmoid(z) # 使用sigmoid作為激活函數(shù)進(jìn)行預(yù)測(cè)loss = np.mean((y_pred - y_data)**2) + (lambda_reg * (m**2 + b**2) / N) # 添加L2正則化項(xiàng)print(f"Epoch {epoch}: m = {m}, b = {b}, loss = {loss}")print(f"Final equation: y = {m} * x + {b}")
解釋
- L2 正則化項(xiàng):在
compute_gradients
函數(shù)中,我們添加了 L2 正則化項(xiàng)(2 * lambda_reg * m / N)
和(2 * lambda_reg * b / N)
,分別對(duì)m
和b
的梯度進(jìn)行正則化。 - 損失函數(shù):在計(jì)算損失函數(shù)時(shí),我們也添加了 L2 正則化項(xiàng)
(lambda_reg * (m**2 + b**2) / N)
。
注意事項(xiàng)
- 正則化系數(shù) λ:
lambda_reg
是一個(gè)超參數(shù),需要通過交叉驗(yàn)證等方法來選擇合適的值。 - 數(shù)據(jù)線性:對(duì)于線性數(shù)據(jù),使用線性激活函數(shù)(如直接使用
z
而不是sigmoid(z)
)可能會(huì)更合適,這樣可以避免 Sigmoid 的壓縮效應(yīng)。 - 學(xué)習(xí)率:學(xué)習(xí)率
learning_rate
也需要適當(dāng)調(diào)整,以確保模型能夠收斂。
希望這些修改能幫助你更好地理解和應(yīng)用 L2 正則化。
5-Relu激活函數(shù)多有夸張
Relu激活函數(shù)是一個(gè)初中生都可以隨手寫出來的一個(gè)函數(shù),看一下想法有多夸張【人有多么懶,地有多大產(chǎn)】
-
1)直接把帶負(fù)值公式全部刪除了(啊啊啊啊啊啊啊。。。。)
-
2)直接把負(fù)值參數(shù)全部抹掉了是個(gè)什么概念,我類比一下:數(shù)學(xué)老師讓我算題
-2x+3y=5 4x+7y=8 3x+8y=15
-
3)我感覺負(fù)數(shù)不好看,直接把第一個(gè)公式刪掉了,按照下面兩個(gè)公式進(jìn)行計(jì)算了。(啊啊啊啊啊啊啊。。。。)
-
4)恐怖的不是我把這個(gè)公式刪掉了,恐怖的是整個(gè)AI圈都在用這個(gè)方法進(jìn)行求解(啊啊啊啊啊啊啊。。。。)
1-細(xì)數(shù)Relu函數(shù)的5宗罪
-
1-引入非線性(解決線性組合的缺陷)
-
2-計(jì)算效率高(強(qiáng)制把梯度設(shè)置為1和0-為0時(shí)把數(shù)據(jù)丟掉了)
-
3-緩解梯度消失問題(強(qiáng)制把梯度設(shè)置為1和0)
-
4-稀疏激活(強(qiáng)制把梯度設(shè)置為1和0)
-
5-死亡ReLU問題(強(qiáng)制把梯度設(shè)置為1和0)
2-Relu函數(shù)5宗罪詳述
引入非線性:在神經(jīng)網(wǎng)絡(luò)中,如果沒有激活函數(shù),多層神經(jīng)網(wǎng)絡(luò)等價(jià)于單層神經(jīng)網(wǎng)絡(luò),因?yàn)榫€性變換的組合仍然是線性的。激活函數(shù)引入了非線性,使得神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)和表示復(fù)雜的函數(shù)關(guān)系。
計(jì)算效率高:ReLU函數(shù)的計(jì)算非常簡單,只需要進(jìn)行一次閾值操作,即判斷輸入是否大于0。這在計(jì)算上比其他激活函數(shù)(如sigmoid或tanh)要高效得多,因?yàn)樗鼈兩婕爸笖?shù)運(yùn)算。
3)緩解梯度消失問題:在深度網(wǎng)絡(luò)中,使用sigmoid或tanh等飽和激活函數(shù)時(shí),容易出現(xiàn)梯度消失問題,即在反向傳播過程中,梯度值會(huì)隨著層的加深而指數(shù)級(jí)衰減,導(dǎo)致網(wǎng)絡(luò)訓(xùn)練困難。ReLU在x>0區(qū)域的梯度恒為1,因此可以緩解這個(gè)問題,使得深層網(wǎng)絡(luò)更容易訓(xùn)練。
稀疏激活:ReLU函數(shù)會(huì)將所有負(fù)輸入置零,這會(huì)導(dǎo)致一部分神經(jīng)元在某些情況下不被激活,從而形成稀疏的激活模式。這種稀疏性有助于減少計(jì)算量,并可能有助于特征學(xué)習(xí)。
5)死亡ReLU問題:盡管ReLU有很多優(yōu)點(diǎn),但也存在一些問題。其中一個(gè)問題是“死亡ReLU”現(xiàn)象,即當(dāng)神經(jīng)元的輸入長期為負(fù)時(shí),其梯度為零,權(quán)重不再更新,神經(jīng)元變得無效。為了解決這個(gè)問題,一些變體如Leaky ReLU、PReLU和ELU被提出,它們?cè)趚<0時(shí)引入一個(gè)小的斜率,以避免神經(jīng)元死亡。
6-那為什么要用這個(gè)Relu函數(shù)
貌似我隨手寫一個(gè)函數(shù),sin、 cos、 tan、 cot甚至我手寫一個(gè)只要不是直線的方程都可以實(shí)現(xiàn)【非線性變換】
確實(shí),許多函數(shù)都可以實(shí)現(xiàn)非線性變換,包括sin
、cos
、tan
、cot
等。然而,ReLU(Rectified Linear Unit)函數(shù)在深度學(xué)習(xí)中被廣泛使用,主要基于以下幾個(gè)原因:
-
計(jì)算效率:ReLU函數(shù)非常簡單,其數(shù)學(xué)表達(dá)式為
f(x) = max(0, x)
。這意味著在計(jì)算時(shí)只需要進(jìn)行一個(gè)簡單的比較和取最大值操作,這比其他復(fù)雜的非線性函數(shù)(如sin
、cos
等)要快得多。 -
稀疏性:ReLU函數(shù)會(huì)將所有負(fù)值置為0,這有助于引入稀疏性。在神經(jīng)網(wǎng)絡(luò)中,稀疏性通常被認(rèn)為是一種有益的特性,因?yàn)樗梢詭椭P透玫胤夯?#xff0c;并減少過擬合的風(fēng)險(xiǎn)。同時(shí),這也使得網(wǎng)絡(luò)更加高效,因?yàn)樵S多神經(jīng)元在某一時(shí)刻可能處于非激活狀態(tài)(輸出為0),從而節(jié)省了計(jì)算資源。
-
緩解梯度消失問題:在深度神經(jīng)網(wǎng)絡(luò)中,當(dāng)使用像
sigmoid
或tanh
這樣的飽和非線性函數(shù)時(shí),梯度在反向傳播過程中可能會(huì)逐漸消失,導(dǎo)致網(wǎng)絡(luò)難以訓(xùn)練。而ReLU函數(shù)在正數(shù)區(qū)域內(nèi)的導(dǎo)數(shù)為1,這意味著梯度可以順暢地通過該層,從而緩解了梯度消失的問題。 -
生物學(xué)啟示:ReLU函數(shù)在某種程度上模擬了生物神經(jīng)元的激活方式。在生物學(xué)中,神經(jīng)元通常只在輸入信號(hào)達(dá)到一定閾值時(shí)才會(huì)被激活。ReLU函數(shù)通過設(shè)定一個(gè)閾值(在本例中為0),實(shí)現(xiàn)了類似的行為。
當(dāng)然,ReLU函數(shù)也有其局限性,例如“死亡ReLU”問題,即當(dāng)神經(jīng)元在訓(xùn)練過程中一直處于非激活狀態(tài)時(shí),其權(quán)重可能無法得到有效的更新。為了解決這個(gè)問題,人們提出了一些ReLU的變種,如Leaky ReLU、Parametric ReLU等。
總的來說,盡管存在許多其他非線性函數(shù)可供選擇,但ReLU函數(shù)因其簡單性、高效性和在深度學(xué)習(xí)中的良好表現(xiàn)而成為了一個(gè)流行的選擇。
7-文本分類情感分析任務(wù)激活
在文本分類、情感分析等自然語言處理任務(wù)中,特征之間的關(guān)系通常是通過神經(jīng)網(wǎng)絡(luò)模型來捕捉的。這些特征可以是詞向量、詞頻、句子結(jié)構(gòu)等,而激活函數(shù)則在這些模型中起到關(guān)鍵作用,幫助模型學(xué)習(xí)非線性關(guān)系,從而更有效地進(jìn)行分類或情感分析。
特征之間的關(guān)系
- 線性關(guān)系:在某些簡單的文本分類任務(wù)中,特征之間的關(guān)系可能是線性的。例如,詞頻特征可以直接用于線性回歸或邏輯回歸模型。
- 非線性關(guān)系:在更復(fù)雜的任務(wù)中,特征之間的關(guān)系往往是非線性的。例如,情感分析中,詞語的順序、上下文關(guān)系等都需要通過非線性模型來捕捉。
- 層次關(guān)系:在深度學(xué)習(xí)模型中,特征之間的關(guān)系通常是通過多層神經(jīng)網(wǎng)絡(luò)來捕捉的。每一層的輸出都是對(duì)輸入特征的更高層次的抽象表示。
常用的激活函數(shù)
-
ReLU(Rectified Linear Unit):
- 公式: f ( x ) = max ? ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)
- 優(yōu)點(diǎn):計(jì)算簡單,避免了梯度消失問題,廣泛用于卷積神經(jīng)網(wǎng)絡(luò)(CNN)和全連接網(wǎng)絡(luò)(FCN)。
- 適用場(chǎng)景:適用于大多數(shù)文本分類和情感分析任務(wù),尤其是在深層網(wǎng)絡(luò)中。
-
Sigmoid:
- 公式: f ( x ) = 1 1 + e ? x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e?x1?
- 優(yōu)點(diǎn):輸出范圍在0到1之間,常用于二分類問題。
- 缺點(diǎn):容易出現(xiàn)梯度消失問題,尤其是在深層網(wǎng)絡(luò)中。
- 適用場(chǎng)景:適用于二分類的情感分析任務(wù)。
-
Tanh(Hyperbolic Tangent):
- 公式: f ( x ) = tanh ? ( x ) = e x ? e ? x e x + e ? x f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+e?xex?e?x?
- 優(yōu)點(diǎn):輸出范圍在-1到1之間,相對(duì)于Sigmoid函數(shù),Tanh函數(shù)的梯度更大,訓(xùn)練速度更快。
- 缺點(diǎn):仍然存在梯度消失問題。
- 適用場(chǎng)景:適用于一些需要輸出的特征值在一定范圍內(nèi)的場(chǎng)景。
-
Softmax:
- 公式: f ( x i ) = e x i ∑ j = 1 n e x j f(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}} f(xi?)=∑j=1n?exj?exi??
- 優(yōu)點(diǎn):用于多分類問題,輸出是一個(gè)概率分布,所有類別的概率和為1。
- 適用場(chǎng)景:適用于多分類的文本分類和情感分析任務(wù)。
-
Leaky ReLU:
- 公式: f ( x ) = max ? ( 0.01 x , x ) f(x) = \max(0.01x, x) f(x)=max(0.01x,x)
- 優(yōu)點(diǎn):在ReLU的基礎(chǔ)上解決了“dying ReLU”問題,即當(dāng)輸入為負(fù)時(shí),輸出不再是0,而是一個(gè)小于0的值。
- 適用場(chǎng)景:適用于需要處理負(fù)值特征的任務(wù),可以提升模型的泛化能力。
-
GELU(Gaussian Error Linear Unit):
- 公式: f ( x ) = x ? Φ ( x ) f(x) = x \cdot \Phi(x) f(x)=x?Φ(x),其中 Φ ( x ) \Phi(x) Φ(x)是標(biāo)準(zhǔn)正態(tài)分布的累積分布函數(shù)。
- 優(yōu)點(diǎn):在Transformer模型中表現(xiàn)良好,能夠更好地處理復(fù)雜的非線性關(guān)系。
- 適用場(chǎng)景:適用于Transformer等復(fù)雜的深度學(xué)習(xí)模型。
總結(jié)
- 特征關(guān)系:在文本分類和情感分析中,特征之間通常是非線性關(guān)系,需要通過激活函數(shù)來捕捉這些關(guān)系。
- 激活函數(shù):常用的激活函數(shù)包括ReLU、Sigmoid、Tanh、Softmax、Leaky ReLU和GELU,選擇合適的激活函數(shù)可以顯著提升模型的性能。
在實(shí)際應(yīng)用中,選擇激活函數(shù)通常取決于任務(wù)的復(fù)雜度和模型的結(jié)構(gòu)。對(duì)于簡單的任務(wù),ReLU和Sigmoid可能已經(jīng)足夠;而對(duì)于復(fù)雜的任務(wù),使用GELU等更復(fù)雜的激活函數(shù)可能會(huì)帶來更好的效果。
8-專業(yè)詞匯解釋
-
計(jì)算效率:ReLU函數(shù)非常簡單,其數(shù)學(xué)表達(dá)式為
f(x) = max(0, x)
。這意味著在計(jì)算時(shí)只需要進(jìn)行一個(gè)簡單的比較和取最大值操作,這比其他復(fù)雜的非線性函數(shù)(如sin
、cos
等)要快得多。 -
稀疏性:ReLU函數(shù)會(huì)將所有負(fù)值置為0,這有助于引入稀疏性。在神經(jīng)網(wǎng)絡(luò)中,稀疏性通常被認(rèn)為是一種有益的特性,因?yàn)樗梢詭椭P透玫胤夯?#xff0c;并減少過擬合的風(fēng)險(xiǎn)。同時(shí),這也使得網(wǎng)絡(luò)更加高效,因?yàn)樵S多神經(jīng)元在某一時(shí)刻可能處于非激活狀態(tài)(輸出為0),從而節(jié)省了計(jì)算資源。
-
緩解梯度消失問題:在深度神經(jīng)網(wǎng)絡(luò)中,當(dāng)使用像
sigmoid
或tanh
這樣的飽和非線性函數(shù)時(shí),梯度在反向傳播過程中可能會(huì)逐漸消失,導(dǎo)致網(wǎng)絡(luò)難以訓(xùn)練。而ReLU函數(shù)在正數(shù)區(qū)域內(nèi)的導(dǎo)數(shù)為1,這意味著梯度可以順暢地通過該層,從而緩解了梯度消失的問題。 -
生物學(xué)啟示:ReLU函數(shù)在某種程度上模擬了生物神經(jīng)元的激活方式。在生物學(xué)中,神經(jīng)元通常只在輸入信號(hào)達(dá)到一定閾值時(shí)才會(huì)被激活。ReLU函數(shù)通過設(shè)定一個(gè)閾值(在本例中為0),實(shí)現(xiàn)了類似的行為。