Mark Chang's Blog

Machine Learning, Deep Learning and Python

Torch NN Tutorial 6 : Backward Propagation ( Part 3 : nn.Module )

Backward Propagation in nn.Module

本文接續 Torch NN Tutorial 4: Backward Propagation (part 1) ,與 Torch NN Tutorial 5: Backward Propagation (part 2) 講解 nn.Module 中, 與 backward propagation 有關的程式碼。

nn.Module 程式碼:https://github.com/torch/nn/blob/master/Module.lua

與 backward propagation 有關的,主要有以下三個運算 :

而這三個運算,分別對應到以下三個 function :

  1. zeroGradParameters

  2. backward

  3. updateParameters

本文將詳細講解這三個 function 的程式碼內容。

註:

1.本文的 同前兩篇文(Torch NN Tutorial 4~5)中的

2.本文中的 為矩陣,而 為向量。

Torch NN Tutorial 5 : Backward Propagation ( Part 2 : nn.Criterion )

Backward Propagation in nn.Criterion

本文接續 Torch NN Tutorial 4: Backward Propagation (part 1) ,講解 nn.Criterion 中,與 backward propagation 相關的程式碼。

Criterion 的 forward 是負責計算 loss funciton 的值,而 backward 則是計算 的值。其中, 為模型預測出的結果。

nn.Criterion 程式碼:https://github.com/torch/nn/blob/master/Criterion.lua

backward 的部分,如下:

nn/Criterion.lua
1
2
3
4
5
6
function Criterion:backward(input, target)
   return self:updateGradInput(input, target)
end

function Criterion:updateGradInput(input, target)
end

nn.Criterionbackward 只做一件事,也就是 updateGradInput ,而 updateGradInput 的運算內容則由繼承它的類別來實作。

Torch NN Tutorial 4: Backward Propagation ( Part 1 : Overview & Linear Regression )

Introduction

本文以 Linear Regression 為例,介紹 Torch nn 如何進行 Backward Propagation。

Linear Regression 是以機器學習的方式,學出以下函數:

以 Gradient Descent 的方式來進行 Linear regression 的流程如下:

其中 為 training data, 為 golden value , 為 predicted value, 分別為 weight 和 bias 。 max_epoch 為 for 迴圈執行次數。

以下詳細講解整個流程,並實作之。

Torch NN Tutorial 3 : NN.Criterion & NN.MSECriterion

Introduction

torch 的 nn.Module 是組成 neural network 的部分,但是要訓練一個 neural network ,就需要有 loss function 。而 nn.Criterion 就是用來計算 loss function 的值。nn.Criterion 是個抽象類別,所有種類的 loss function 都繼承於它。

例如, loss funciton 用 Minimum Square Error 時, 為模型預測出來的數值, 為正確的數值 ,則 loss function 的公式如下:

在 torch 中,負責計算 Minimum Square Error 的 criterion 為 nn.MSECriterion

Torch NN Tutorial 2 : NN.Container & NN.Sequential

Introduction

Torch NN tutorial 1 : NN.Module & NN.Linear中,介紹了構成 neural network 的最基本的單位,也就是 nn.Module ,並介紹了 nn.Linear 可以進行一次線性運算,但通常一個 neural network 是經由多個線性和非線性的運算構成的。要把多個 Module 串接起來,就需要用到 nn.Contaner

例如,有個 neural network 的輸入為 x ,輸出為 z ,中間經過了一次線性運算與一個sigmoid function ,如下:

假設 為 2 維的向量,而 為 3 維向量, 分別為 weight 和 bias ,此兩參數皆以隨機值進行初始化, 經過 sigmoid 非線性運算的輸出結果。

Torch NN Tutorial 1 : NN.Module & NN.Linear

Introduction

此系列講解如何用 torch 實作 neural network 。

本系列不講解如何安裝 torch 及 lua 的基本語法,假設讀者都已具備這些基礎知識。

以 torch 實作 neural network 時,最常用的套件為 nn,而在 nn 中,建構 neural network 最基本的單位為 nn.Modulenn.Module 是一個抽象類別,所有建構 neural network 本身有關的 module ,都是從 nn.Module 所繼承而來。

舉個例子,如果要實作以下運算:

假設 為 2 維的 input ,而 為 3 維的output, 分別為 weight 和 bias ,此兩參數皆以隨機值進行初始化。

使用 torch 實作此運算的方法如下:

首先,載入 nn 套件:

1
require 'nn'

建立一個 Linear Module:

1
l1 = nn.Linear(2,3)

Word2vec (Part 3 : Implementation)

Introduction

本文接續 word2vec (part2) ,介紹如何根據推導出來的 backward propagation 公式,從頭到尾實作一個簡易版的 word2vec

本例的 input layer 採用 skip-gram , output layer 採用 negative sampling

本例用唐詩語料庫:https://github.com/ckmarkoh/coscup_nndl/blob/master/poem.txt

首先,載入所需的模組

1
2
3
4
5
import json
from collections import Counter, OrderedDict
import numpy as np
import random
import math

Word2vec (Part 2 : Backward Propagation)

Introduction

本文接續 word2vec (part1) ,介紹 word2vec 訓練過程的 backward propagation 公式推導。

word2vec 的訓練過程中,輸出的結果,跟上下文有關的字,在 output layer 輸出為 1 ,跟上下文無關的字,在 output layer 輸出為 0。 在此,把跟上下文有關的,稱為 positive example ,而跟上下文無關的,稱為 negative example

根據 word2vec (part1) 中提到的例子, cat 的向量為 run 的向量為 fly 的向量為 ,由於 cat 的上下文有 run ,所以 runpositive example ,而 cat 的上下文沒有 fly ,所以 flynegative example ,如下圖所示:

Word2vec (Part 1 : Overview)

Introduction

文字的語意可以用向量來表示,在上一篇 Vector Space of Semantics 中提到,如果把每種字當成一個維度,假設總共有一萬總字,那向量就會有一萬個維度。有兩種方法可降低維度,分別是 singular value decompositionword2vec

本文講解 word2vec 的原理。 word2vec 流程,總結如下:

首先,將文字做 one-hot encoding ,然後再用 word2vec 類神經網路計算,求出壓縮後(維度降低後)的語意向量。

Vector Space of Semantics

Introduction

如果要判斷某個字的語意,可以用它鄰近的字來判斷,例如以下句子:

The dog run. A cat run. A dog sleep. The cat sleep. A dog bark. The cat meows. The bird fly. A bird sleep.

由於 dogcat 這兩個字出現在類似的上下文情境中,因此,可以判斷出 dogcat 語意相近。

如果要能夠用數學運算,來計算語意相近程度,可以把文字的語意用向量表示,如下:

其中, dog 的向量為 ( 2, 1, 0, 0, 0, 0, 0, 1, 1, 1 ) ,第一個維度表示 doga 旁邊的次數有 2 次,第二個維度表示在 bark 旁邊的次數有 1 次,以此類推。