您在先前的練習中發現,剛剛新增 不足以代表非線性 針對線性作業執行的線性運算仍為線性運算。
如何設定類神經網路 值之間的非線性關係?我們需要設法將非線性 將數學運算轉換成模型
如果您不太熟悉 非線性數學運算傳遞至線性模型輸出 (使用 我們稍後將在課程 深入介紹這些原則及擬定過程在「邏輯迴歸」 模組,我們調整了線性迴歸模型,以輸出 0 的連續值 代表 1 (代表機率),方法是透過 S 函數。
我們可以將同樣的原則套用到我們的類神經網路讓我們回顧一下模型 之前的運動 2,但這次 我們會先套用 S 函數:
按一下 >| 按鈕,試著逐步計算各節點 (位於播放按鈕右側)。檢視已執行的數學運算 ,在圖表下方的「計算」面板中計算每個節點值。 請注意,每個節點的輸出內容現在都是線性的 S 函數 上一層的節點組合,而輸出值 總數介於 0 到 1 之間
在這個範例中,S 函數則是 活化函數 用於類神經網路的線性轉換 然後將值做為輸入內容傳入下一個 類神經網路層的神經網路層
現在,我們新增了啟動函式,新增圖層會產生更多影響。 堆疊非線性關係中的非線性特徵,就能讓模型變得非常複雜 說明輸入內容與預測結果間的關係簡單來說 能有效學習較複雜、高階的函式,而非原始 輸入內容如果想更瞭解怎麼做 請參閱 Chris Olah 的優質網誌文章。
常見啟動函式
以下三個常用為啟動函式的數學函式: Sigmoid、tanh 和 ReLU。
S 函數 (如前所述) 會對輸入執行下列轉換 $x$,產生 0 到 1 之間的輸出值:
\[F(x)=\frac{1} {1+e^{-x}}\]
這個函式的圖表如下:
![圖 4. S 函數的繪製圖:S 形曲線
不對稱地將 X 軸靠近 X 軸
1 增加到無限大,1 則代表到無限大。](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=0000&hl=zh-tw)
Tanh (「雙曲正切」的簡稱) 函式會將輸入內容 $x$ 轉換為 產生介於 1 與 1 之間的輸出值:
\[F(x)=tanh(x)\]
這個函式的圖表如下:
![圖 5. Tanh 函式圖:稍微
比 S 形函數的陡峭 S 形曲線,不對稱
方法:1 接近負無限大,1 則接近 X
無限。](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=0000&hl=zh-tw)
更正線性單元活化函數 (或稱 ReLU, short) 使用下列演算法轉換輸出內容:
- 如果輸入的 $x$ 小於 0,就會傳回 0。
- 如果輸入值 $x$ 大於或等於 0,就會傳回輸入值。
您可以使用 max() 函式,以數學方式表示 ReLU:
這個函式的圖表如下:
![圖 6. ReLU 函式的繪製圖:水平線
沿著 X 軸的負無限大到 0,最後變成對角線
向右移動,斜坡率為 1 (y=x),範圍從 0 到無限大](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=0000&hl=zh-tw)
ReLU 通常像是活化函數,但效果比平滑流暢 功能類似 S 或 tanh 消失的漸層問題 加入類神經網路訓練ReLU 也大幅簡化 計算運算結果
其他活化函式
實務上,任何數學函式都可以做為活化函數。 假設 \(\sigma\) 代表我們的啟動函式。 網路中節點的值是由下列元件所提供 公式:
Keras 提供立即可用的支援 活化函數。 儘管如此,我們仍建議先從 ReLU 著手。
摘要
以下影片回顧你目前為止學到的所有內容 類神經網路的建構方式:
現在,模型已取得使用者平常 意味著這些詞彙是指
- 一組節點,類似神經元,結構分層。
- 一組權重,代表各個類神經網路之間的連線 先前的資料層下方的圖層可能是 類神經網路層或其他類型的資料層
- 一組偏誤,每個節點一個。
- 此啟動函式可轉換圖層中每個節點的輸出內容。 不同層可能會有不同的活化函式。
注意事項:類神經網路不一定比 但類神經網路提供了一種靈活的替代方法 而且在許多情況下都能派上用場