CNTK - 神經網路 (NN) 概念



本章討論關於 CNTK 的神經網路概念。

眾所周知,神經網路由多層神經元構成。但是,問題在於如何在 CNTK 中建模 NN 的各層?這可以透過層模組中定義的層函式來實現。

層函式

實際上,在 CNTK 中,使用層具有明顯的函數語言程式設計風格。層函式看起來像一個普通函式,它產生一個具有預定義引數的數學函式。讓我們看看如何使用層函式建立最基本的層型別 Dense。

示例

透過以下基本步驟,我們可以建立最基本的層型別:

步驟 1 - 首先,我們需要從 CNTK 的 layers 包中匯入 Dense 層函式。

from cntk.layers import Dense

步驟 2 - 接下來,我們需要從 CNTK 根包中匯入 input_variable 函式。

from cntk import input_variable

步驟 3 - 現在,我們需要使用 input_variable 函式建立一個新的輸入變數。我們還需要提供其大小。

feature = input_variable(100)

步驟 4 - 最後,我們將使用 Dense 函式建立一個新層,並提供我們想要的 neurons 數量。

layer = Dense(40)(feature)

現在,我們可以呼叫已配置的 Dense 層函式將 Dense 層連線到輸入。

完整的實現示例

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

自定義層

正如我們所看到的,CNTK 為我們提供了一套相當不錯的預設設定來構建 NN。根據我們選擇的啟用函式和其他設定,NN 的行為和效能會有所不同。這是另一個非常有用的詞幹提取演算法。因此,瞭解我們可以配置什麼內容是很好的。

配置 Dense 層的步驟

NN 中的每個層都有其獨特的配置選項,當我們談到 Dense 層時,我們有以下重要的設定需要定義:

  • shape - 顧名思義,它定義了層的輸出形狀,這進一步決定了該層中的神經元數量。

  • activation - 它定義了該層的啟用函式,因此它可以轉換輸入資料。

  • init - 它定義了該層的初始化函式。當我們開始訓練 NN 時,它將初始化該層的引數。

讓我們看看我們可以使用哪些步驟來配置Dense層:

步驟 1 - 首先,我們需要從 layers 包中匯入Dense層函式。

from cntk.layers import Dense

步驟 2 - 接下來,我們需要從 CNTK ops 包中匯入sigmoid 運算元。它將用作啟用函式。

from cntk.ops import sigmoid

步驟 3 - 現在,我們需要從 initializer 包中匯入glorot_uniform初始化器。

from cntk.initializer import glorot_uniform

步驟 4 - 最後,我們將使用 Dense 函式建立一個新層,並將神經元數量作為第一個引數提供。此外,還將sigmoid運算元作為activation函式,並將glorot_uniform作為該層的init函式提供。

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

完整的實現示例:

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

最佳化引數

到目前為止,我們已經瞭解瞭如何建立 NN 的結構以及如何配置各種設定。在這裡,我們將瞭解如何最佳化 NN 的引數。藉助於學習器訓練器這兩個元件的組合,我們可以最佳化 NN 的引數。

訓練器元件

用於最佳化 NN 引數的第一個元件是訓練器元件。它基本上實現了反向傳播過程。如果我們談論它的工作原理,它會將資料透過 NN 傳遞以獲得預測。

之後,它使用另一個稱為學習器的元件來獲取 NN 中引數的新值。一旦它獲得新值,它就會應用這些新值並重復此過程,直到滿足退出條件。

學習器元件

用於最佳化 NN 引數的第二個元件是學習器元件,它主要負責執行梯度下降演算法。

CNTK 庫中包含的學習器

以下是 CNTK 庫中包含的一些有趣的學習器的列表:

  • 隨機梯度下降 (SGD) - 此學習器表示基本的隨機梯度下降,沒有任何額外功能。

  • 動量隨機梯度下降 (MomentumSGD) - 使用 SGD,此學習器應用動量來克服區域性最大值的問題。

  • RMSProp - 此學習器為了控制下降率,使用衰減學習率。

  • Adam - 此學習器為了隨著時間的推移降低下降率,使用衰減動量。

  • Adagrad - 此學習器對於頻繁出現的和不頻繁出現的特徵使用不同的學習率。

廣告
© . All rights reserved.