over 1 year ago

本部落格已搬移至:https://ckmarkoh.github.io/

此處僅保留 2016/9/1 之前的文章

新文章將不在此發布

 
over 1 year ago

Introduction

本文接續 word2vec (part2) ,介紹如何根據推導出來的 backward propagation 公式,從頭到尾實作一個簡易版的 word2vec
本例的 input layer 採用 skip-gram , output layer 採用 negative sampling

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

首先,載入所需的模組

import json
from collections import Counter, OrderedDict
import numpy as np
import random
import math
Read on →
 
almost 2 years ago

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 ,如下圖所示:

Read on →
 
almost 2 years ago

Introduction

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

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

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

Read on →
 
almost 2 years ago

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 次,以此類推。

Read on →
 
almost 2 years ago

Introduction

Gibbs Sampling 是一種類似於 Metropolis Hasting 的抽樣方式,也是根據機率分佈來建立 Markov Chain ,並在 Markov Chain 上行走,抽樣出機率分佈。

設一 Markov Chain , 有 ab 兩個 state ,它們的值分別為 ,而它們之間的轉移機率,分別為 ,如下圖:

達平衡時,會滿足以下條件:

因此,達到平衡時,得出 (公式一)

Metropolis Hasting 這篇有提到,可以利用 Markov Chain 最終會達到平衡的特性,來為某機率分佈 抽樣。

但是 Metropolis Hasting 抽樣時,需要先用 proposed distribution 計算出下一個時間點可能的值,然後 acceptance probability 來拒絕它,因為計算出來的值會被拒絕,所以造成計算上的浪費。

而對於一高維度的機率分佈 ,可以用另一種方式來建立 Markov Chain ,則不會有這個問題。這種方法為 Gibbs Sampling

Read on →
 
almost 2 years ago

Introduction

對一個 Markov Chain 而言,不論起始狀態為多少,最後會達到一個穩定平衡的狀態。

舉個例子,以下為一 Markov Chain

則此 Markov Chain 達平衡狀態時, 的比率為,也就是說:

不管此 Markov Chain 的起始狀態如何,最後達平衡狀態時, 的比率一定為。因此,如果在這 Markov Chain 任一一個點開始走,假設走的次數夠多的話,走到 和走到 的比例。會是 。因此,可利用 Markov Chain 最後會收斂到一穩定狀態的特性,來進行抽樣。

Metropolis Sampler 即是給定一機率分佈函數,從這機率函數建立 Markov Chain ,然後再用建立出來的 Markov Chain 來進行抽樣。

Read on →
 
almost 2 years ago

Introduction

若某個有 個維度的 data 的產生,是跟某個有 個維度的 hidden variable 有關,在機率圖模型,表示成:

從這機率圖形,可得出 hidden variable 的聯合分佈機率:

若是給定 hidden variable 的值,則可產生 data ,如下:

但如果給定 data 的值,這組 data 所對應到的 hidden variable 的值,如下:

其中,分母 積分如果無法算出來的時候,就無法直接算出 的值,則要用估計的方法來計算 的值。

Variational Inference 用來估計 的值 。

Read on →
 
over 2 years ago

AdaGrad

本文接續 Optimization Method -- Gradient Descent & AdaGrad 。所提到的 AdaGrad ,及改良它的方法 -- AdaDelta

在機器學習最佳化過程中,用 AdaGrad 可以隨著時間來縮小 Learning Rage ,以達到較好的收斂效果。AdaGrad 的公式如下:

不過, AdaGrad 有個缺點,由於 恆為正,故 只會隨著時間增加而遞增,所以 只會隨著時間增加而一直遞減,如果 Learning Rate 的值太小,則 AdaGrad 會較慢才收斂。

舉個例子,如果目標函數為 ,起始點為 Learning Rate ,則整個最佳化的過程如下圖,曲面為目標函數,紅色的點為

Read on →
 
over 2 years ago

Gradient Descent

機器學習中,用 Gradient Descent 是解最佳化問題,最基本的方法。關於Gradient Descent的公式,請參考:Optimization Method -- Gradient Descent & AdaGrad

對於 Cost function ,在 時, Gradient Descent 走的方向為 。也就是,用泰勒展開式展開後,用一次微分 來趨近的方向,如下圖:

註:考慮到 為向量的情形,故一次微分寫成

其中, 為原本的 Cost function ,而 為泰勒展開式取一次微分逼近的。 而 Gradient Descent 走的方向為 ,為沿著 的方向。

Read on →