2016年12月28日 星期三

[Tensorflow] GPU版本安裝硬體需求

[ 這篇文是寫給GPU版本的使用者,CPU版本的使用者可以忽略 ]

NVIDIA 官網上面提供的 GPU版本 TensorFlow 安裝教學文件

提醒各位,如果是在 Linux 環境底下,務必事先確保正在安裝的版本是可以支援的

不然會面臨 重新解除安裝,再重新安裝 的窘境

對於 Linux 新手來說,如果沒有具備經驗的人從旁指導,所消耗的時間是巨大的...

以下是相關安裝所需要具備的條件

The GPU-enabled version of TensorFlow has the following requirements:
  • 64-bit Linux
  • Python 2.7
  • NVIDIA CUDA® 7.5 (CUDA 8.0 required for Pascal GPUs)
  • NVIDIA cuDNN v4.0 (minimum) or v5.1 (recommended)

You will also need an NVIDIA GPU supporting compute capability 3.0 or higher.
- See more at: http://www.nvidia.com/object/gpu-accelerated-applications-tensorflow-installation.html#sthash.TfIK4hr5.dpuf

 別忘了,要使用支援運算能力達到 3.0 以上的 GPU 卡

還有下載下來的 Tensorflow 版本需要能支援以上條件 NVIDIA 驅動程式以及開發套件

2016年12月24日 星期六

GPU 使用率檢查

最近需要使用 GPU 版本的 Tensorflow 來進行訓練

但是我們該如何檢查 GPU 使用的狀況呢?

以下是 lab 的政岳學長以及我從網路上找到的資訊


在cmd 視窗中執行

nvidia-smi

(更多關於nvidia-smi的資訊可以看這個網頁的介紹)

就能夠出現以下圖一中關於GPU的資訊畫面

圖一、GPU 程序 [原圖來源]

如果有GPU程序在執行的話,在圖一下方中 processes 那欄會出現

第幾個 GPU 上面跑著的程序,它的 Process ID(PID) 是多少

還有 GPU 記憶體使用率是多少

2016年12月23日 星期五

[Tensorfow] 簡易影像分類器 訓練教學 - TensorFlow For Poets

TensorFlow For Poets 是一篇訓練分類兩種不同種花的教學文

按照步驟輸入指令,就能夠順利安裝 Docker

接著再按照步驟一步一步的訓練完分類器之後

在Docker的環境裡面執行以下的指令

python /tf_files/label_images.py /tf_files/flower_photos/花的資料夾/某張花的影像檔名.副檔名

cmd就會把兩個分類結果選項以及分數給秀出來,就如同下面這樣

daisy (score = 0.99936)
roses (score = 0.00064)

從分數的高低,可以知道我剛剛用來測試的影像是 Daisy(雛菊)


2016年11月24日 星期四

[Tensorflow] 資料可視化 - Tensorboard

一直被 Tensorboard 沒辦法顯示 graph 這件事情困擾

TensorFlow 官網也沒有一步步的圖文教學

後來在 youtube 上面找到對岸網友 周莫煩 的TensorFlow 資料可視化教學視頻

Tensorflow 14 Visualization Tensorboard 1 (neural network tutorials)

利用周莫煩提供的程式碼

加上下面這個視頻

TensorFlow Tutorial in Chinese 10:TensorBoard 可视化计算图谱

點選上排的Graph

就能夠顯示基本的神經網絡資料圖表了




我發現上禮拜一直沒有辦法顯示 DataFlow Graph 的原因了

其實很簡單

在前面的 Tensorflow 14 Visualization Tensorboard 1 (neural network tutorials) 這段影片中

10:41 也有提到這件事情

執行完程式之後

writer = tf.train.SummaryWriter("logs/", sess.graph) 這行程式碼會創造出一個 logs 資料夾

同時內含有 Tensorboard 所需要的資訊

如果終端機現在進入 logs 檔,並在終端機中輸入

tensorboard  --logdir="logs"

它已經在 logs 資料夾中,以至於讀不到logs資料夾中產生的紀錄檔

因此,回到資料夾的上一層

重新輸入

tensorboard  --logdir="logs"
它會給我們一個 https 的位址,將它輸入瀏覽器中,就能夠進入 Tensorboard 中

點選上排的 Graph 按鍵,即可得到 DataFlow Graph

(轉) TechOrange - 連續創辦 25 家公司,MIT 教授告訴大家最好的學術實踐就是創業

內文簡介:

對於只能夠存活在實驗室的技術,是不夠力的!

全文在此

"Robert Langer(鮑伯•蘭格)作為麻省理工(MIT)的教授,擁有全美最大的實驗室(實驗室人員超百人),每年 1000 多萬美元的研發經費,研發效率和產出極高。作為 MIT 為數不多的學院教授(Institute Professors,MIT 最高教授頭銜)之一,Robert Langer 實驗室以研究靶向藥物傳遞系統和組織工程學而出名,累計發表了 1200 多篇專業論文,申請過 900 多項專利,其中 400 多項已經授權。Robert Langer 自幼就很喜歡化學,在康乃爾大學和 MIT 拿了化工專業的學位,進入研究生院後利用自己的化學和化工背景,研究開發與生命健康有關聯和幫助的項目。早在 1991 年,年僅 43 歲的 Robert Langer 就獲得了美國三大科學院院士(美國科學院、美國工程院和醫學院)頭銜,獲得了包括 Charles Stark Draper 獎、Lemelson-MIT 獎和 Albany 醫學中心醫學與生物醫學研究大獎、日本京都獎等榮譽,一直活躍在 MIT 的化學工程系和生物工程系。Robert Langer 不僅學術做得好,而且很有商業頭腦。自從 1987 年起,他一口氣辦連辦 25 家新公司,多數是與他的學生和博士後共同創辦的生物技術公司及醫療器械公司。" 

視覺化呈現 MNIST

最近在用 mnist 這個手寫數字影像資料庫進行簡單的機器學習

官方提供了一個非常"視覺化"的博文教學

讓大家可以仔細體會一下這個資料庫

2016年11月23日 星期三

(轉)【机器学习】Logistic Regression 的前世今生(理论篇)

文章連結:http://blog.csdn.net/cyh_24/article/details/50359055

對岸這篇文章討論邏輯回歸分析理論,同時有 gif 圖讓讀者快速了解中間發生什麼事情

2016年11月22日 星期二

關於 Overfitting, Regularization 與 Dropout

Overfitting 過度擬合

overfitting 就像小考GJ,大考GG

根據台大電機系 李宏毅教授 的深度習課程 ML Lecture 1: Regression - Case Study

提到,如果今天算出來的回歸分析模型用在訓練資料的誤差總和(Error Sum)很小

(error = 實際減去預測的差值,即理論與現實的差距)

但是用在模型尚未看過的測試資料(想像成最終測試的大考),若誤差總和很大

表示預測的效果不佳,這個現象就叫做 overfitting

例如下圖中的橘色線,它的數值大小就是代表誤差大小

在第5組測資發生了誤差超大的現象


圖一(擷取自課程影片)


Regularization 

在這篇 Quora:What is regularization in machine learning? 的文章中
鄉民 Yassine Alouini 回答的最好。基本上Regularization的目的就是

避免 overfitting 發生的技巧


在原本的 loss function 中,額外加入紅色方框所框起來的 lamda 項

成為新的 loss function

lamda 項中的 wi 是把已經求出 model 的 wi 項加總起來,再乘以lamda 

但是為什麽希望 wi 比較小呢?

因為輸入項對於 loss function 比較不敏感,影響就會比較小!

但是不考慮 bias,因為bias 對於 loss function 本身的平滑程度沒有任何影響



圖二(擷取自課程影片)

當然,無限制的增加 lamda 大小並不會讓 loss function 無限制的變小

因為隨著 lamda越來越大,lamda 項對於 loss function 的影響會越來越大

圖三(擷取自課程影片)


Dropout

在資料樣本數較少的情況底下,為了避免過度擬合 overfitting 所使用的技巧


歷史背景

在 Hinton 於 2006 年提出打下深度學習基礎的重要論文中

所使用的神經網路是受限制玻茲曼機( Restricted Boltzmann Machine )

它使用到了 Dropout 的技巧,丟掉(drop)某些前一層的神經元的輸入

來避免 Overfitting,讓神經網路的層數能夠更上一層樓

概念上可以想像成,假設今天我們要設計一個深層的類神經網路

可以從文字特徵判斷這個生物是不是人

                     「human」的圖片搜尋結果

Dropout的概念可以想像成從目前有的資訊,擷取重要的核心骨幹部份

排除掉相異的部份

例如,同樣是人類,黃種人、黑人、白人的核心概念都是人這個種族

但是某些特徵只屬於特地膚色的,我們就將這些部份的資訊改忽略不考慮

不讓這些資訊在倒傳遞過程中改變神經網路中的權重

這樣,深層的類神經網路就能夠專注的判斷這些測試資料是不是人

而不會被枝微末節的資訊所影響


這篇博文有個簡單的解釋 Deep learning:四十一(Dropout简单理解) 

原始論文在此,方便自己以後查閱
Srivastava, Nitish, et al. "Dropout: a simple way to prevent neural networks from overfitting." Journal of Machine Learning Research 15.1 (2014): 1929-1958.

講述受限制玻茲曼機相當清楚的論文: 张春霞, 受限波尔兹曼机简介

2016年11月21日 星期一

[名詞解釋] 交叉熵 - Cross Entropy

在練習 Tensorflow 的程式的時候,看到了一個一直出現的名詞 - 交叉熵

以前在學熱力學的時候從來沒有搞懂什麼是熵

現在它又回來騷擾我了

為了避免它的騷擾

我覺得正面迎戰它

這篇對岸同胞寫的博文 以及 Tensorflow 官網上推薦的這篇博文

用清楚、圖片說明的方式讓大家能夠理解資訊領域中熵、交叉熵的意思是什麼


2016年11月17日 星期四

(後續暫停)[Udacity - Deep Learning] Assignment 1

Udacity - Deep Learning - Assignment 1

任務一


第一份指定作業的第一個任務只有要大家顯示某張圖庫中的影像而已

這邊基本上跟Tensorflow的部份關係還不大

透過討論區的這篇文章( Assignment 1 problem 1 Image display),將第一個任務給解出來

程式碼如下:

import matplotlib.image as mpimg
import pylab as plt

img = mpimg.imread('Q0NXaWxkV29yZHMtQm9sZEl0YWxpYy50dGY=.png')
plt.imshow(img)
plt.show()

目前遇到一個問題是 %matplotlib inline 這行一直顯示語法錯誤

在 stackoverflow 找到這篇  python SyntaxError: invalid syntax %matplotlib inline

才知道要在特定的環境進行編譯才可以編譯...XD

if you are not using Jupyter IPython notebook, just comment out (or delete) the line, everything will work fine and a separate plot window will be opened if you are running your python script from the console.

但是解決了之後,我顯示的圖案會變成奇怪的顏色(colormap選錯了)

後來在 stackoverflow 上找了一下

原來是因為 plt.imshow() 預設是顯示彩色的colormap

如果輸入的影像是灰階影像

程式會自動幫忙套色,因此最後會顯示出彩色的影像

將程式碼改成:

plt.imshow(img,cmap='gray')
即可

任務二

題意不清楚,後續先暫停,直接以 TensorFlow 的教學練習

2016年11月6日 星期日

[Python] 基本常識

學習課程 - codecademy 中的 Python 課程

基礎

如何列印包含英文字母(字串)以及數字在同一行中

如何去除字串中的空格

邏輯運算子(Logic Operator)

如何使用 AND 與 OR 運算子

函式(functions)

迴圈(Loops)

類別(Classes)

Q : python中的 self 指的是什麼意思 ?
Ans:
1. 習慣上,我們把一個method的第一個參數叫做 self 。這只是一個習慣而已, self 這個名字對Python來說完全沒有什麼特殊的意義。(但是你要注意,如果你不用這一個習慣的話,對於某些讀你程式的Python程式設計師來說,也許你程式的可讀性就低了一點。 --- Python 教學文件 - 9. Class(類別)

2.  在函數中
def __init__(self, number, name):
    self.number = number
    self.name = name
    self.balance = 0
解釋1 : 第一個self參數代表建立的類別實例,在Python中,實例可操作的方法,第一個參數必須明確作為接受實例之用,慣例上取名為 self 名稱。  ---  定義類別

解釋2 : 而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self --- 【整理】Python中:self和__init__的含义 + 为何要有self和__init__

Q : python中的"__init__" 指的是什麼意思 ?
Ans:
用來定義類別的實例建立之後,要進行的初始化動作

def __init__(self, number, name):
    self.number = number
    self.name = name
    self.balance = 0
=>  __init__之後則可指定初始化時所必須給定的資料

資料結構

2016年11月4日 星期五

[Leetcode 難度:easy] 226. Invert Binary Tree using Python

目標:

補充資料結構的知識

這邊有一篇blog講 python data structure 的 tree  structure 部份講得蠻清楚的

此外,本篇可以用到的交換技巧 ( [Python] swap

在python中,兩個變數進行數值互換的語法可以寫成一行程式碼即可

a, b = b, a

這樣就不用另外創造一個新的函式來處理數據交換的事情


本篇的答案 (提示:Use recursion to invert tree.)





2016年10月26日 星期三

[Introduction to Machine Learning] 程式實做 Quiz: Features In The Enron Dataset & Quiz: How Many POIs Exist?

[Introduction to Machine Learning]  程式實做 Quiz: Features In The Enron Dataset

Python 的特色在於處理文字類型的資料,其中有個東西叫作 Dictionary

可以當作儲存不同型別的資料的工具


其中在 Datasets and Questions 這個章節中

問題1 : 我們需要找到 Enron_data 中總共有多少"人"

要計算總共有多少人的話,根據 Quiz: Size of the Enron Dataset 的提示

就相當於找到 dictionary 中的 key 的數目 (key:value pair中的key)

詳細可以看 5.5. Dictionaries 的解說


問題2 : 每個姓名總共有"幾種"不同種類的資料

要計算總共有幾種的話,根據論壇中的這篇發問 [Intro to Machine Learning] Solution to Lesson 5 quiz question (“finding the POIs in the Enron Data”) 

我們能夠順利找到總共有幾"種"

(但是實際執行的時候發現答案只有18,與真正的答案 21 差了 3 個... debug中)

附上正確答案 (Datasets and Question

除錯:
根據目前debug的結果可以發現,我猜測是之後有題目是要求找具有 'poi' 的項目總共有幾個

裡面的確有一項是 'poi',所以要找 value 項是 poi 且為 true 的項目

所以不是python的什麼神奇指令 poi ,完全是誤會一場...XD

所以是我誤會了,程式碼本身沒有問題,是我誤會了題目跟程式碼之間的關聯性

所以上的正確答案是對的,直接用 len() 函式把任意一個 key 的子dictionary長度求出來

(想像成資料結構是父dictionary裡面有子dictionary就好,只是父dictionary存的key/value pair是一個一個的姓名,子dictionary是存一個一個的信件流向的資料)

得到的數值就是dictionary的value總個數

程式碼如下
-------------------------------------------------------
for key,value in enron_data.items(): #enron_data 是課堂練習用的資料庫
    if value["poi"] == True:
        count += 1
        print count

-------------------------------------------------------
[Introduction to Machine Learning] 程式實做 Quiz: Quiz: How Many POIs Exist?

We compiled a list of all POI names (in ../final_project/poi_names.txt) and associated email addresses (in ../final_project/poi_email_addresses.py).

How many POI’s were there total? (Use the names file, not the email addresses, since many folks have more than one address and a few didn’t work for Enron, so we don’t have their emails.)

Lesson 5 - How many POIs exist?

小心多餘的那兩行,所以記得在計算len()的時候記得把不包含姓名的那兩段劃掉!

#----------------------------------------------------------#
* Python debugger 工具 *

方案1 ubuntu cmd中搭配 Ipython/pdb 文字指令式 除錯工具
方案2 IDE gui 圖形化介面 除錯

難度 : 2 > 1
自由度(可適應Linux系統環境)與挑戰自己能力: 1>2


2016年10月18日 星期二

[Udacity-Introduction to Machine Learning] Min/Max Rescaler Coding Quiz


這次的 scaler 的實做結果,相當於 差補(Interpolation) 外加 均一化(Normalize) 功能




感謝國外網友 doug_178432664390571 的答案

Can some one please help me with the floating format #6

這次的作業發現 :

迴圈
1. 自己對於Python 的 for loop 語法不是這麼熟悉

數字運算
2. 對於Python 的數字運算規則還需要更清楚

Python 的浮點數 float 除法
How can I force division to be floating point in Python? Division keeps rounding down to 0

列表 List
3. list 的語法以及外掛append()使用功能沒這麼熟悉

2016年10月11日 星期二

[學習筆記22] 機器學習基石 - Lecture 10 Logistic Regression

[Youtube 影片38 Logistic Regression :: Logistic Regression Problem]

前面一個學習筆記 21 介紹了迴歸分析的方法,可以找到最好的W (WLin)

圖一、前情題要

如果今天我們要把這個系統應用到醫院的疾病判斷系統

我們先從二元判斷這件事情開始,我們在乎的是錯誤率是多少

圖二、心臟病的二元分類問題

在這邊我們與前一個想關注的問題不一樣

我們在意的是病患的心臟病發的機率是多少

意思是被標記為 o 的病患,判定正確的機率是多少 (還記得目標分布Target Distribution嗎?)

如果計算出的數值越高的話,就有越高的機率被評為 o

所以這邊用了一個詞叫作 Soft Binary Classification

圖三、心臟病的發生機率問題

 今天我們比較希望能夠得到一個有不同資料所計算出來的數值

但是實際上很有可能只能夠拿到 o 或 x 的二元資訊


圖四、理論與實際資料的差別

那轉念一想,我們是不是能夠將圖四中的實際資料,看作有雜訊的資料呢 ?

意思是,雖然我們的目標分布不一樣,但是二元分類的結果卻相同

問題來了,那我們要怎麼找出合適的Hypothsis來分辨這些ox資料的實際目標分布呢?

圖五、含有雜訊的資料

聰明的人想到一個辦法,就是這邊要介紹的 Logistic Hypothesis

( 在樣型識別中會學到的 Sigmoid )

加入x0項之後,將這些x們與權重w進行計算,叫作風險分數 (risk score)

再把風險分數變成估測某件事情發生的機率,便能夠達成前一個問題所問的事情

那怎麼求得  Logistic hypothesis 呢 ?

圖六、Logistic hypothesis

圖七中顯示的就是 Logistic hypothesis 的公式

是一個平滑,嚴格遞增,長得有點像s曲現的函數,稱作 Sigmoid 函數

得到了這個 Logistic hypothesis,我們就能夠將它應用在 h(x)上

圖七、Logistic Function

課後練習


Ans : 從選項裡面找到能夠與 Simoid 輸出一樣結果的,就是答案


-----------------------------------------------------------------------------------------------
[Youtube 影片39 Logistic Regression :: Logistic Regression Error]

圖八中,這三個不同的模型,都是為了要達到資料分類的目的

那今天就是要求出 logistic regression 的錯誤衡量方式 err

圖八、三個學過的模型

如果今天有一組資料 D,這些資料產生的機率 f 是多少 ?

圖九、可能性

圖十、 條件機率用 1- f(x) 取代

又因為 f  和 p是密不可分的,所以可以將條件機率的部分 P(o或x | xn) 換成 1 - f(xn)

由於 f 的取得可能有困難,因此我們假裝 h 是 f  (雖然不是真的取代,但不妨試試)

來看看 h 產生與f結果一模一樣的機率有多少 ?

如果今天 h 跟 f 很接近的話,他們一模一樣的機率就很高

圖十一、用 h 假裝取代 f

從所有的 h 找可能性最高的來當 g

由於Logistic函數的對稱性,可以將 1-h(x) 改寫成 h(-x)

那麼我們能夠把原本探討可能性的式子,變成所有項的相乘

灰色的部分得話,是因為相同,所以顯示的是圖十二與圖十三中不一樣的部分

圖十二、可能性的計算方式

將可能性計算公式 Likelihood(h) 進行改寫,將 1-h(x) 改寫成 h(-x)

就可以得到連乘的式子結果,可能性正比於所有項的相乘

圖十三、可能性的計算方式改寫

推導 Cross Entropy Error

想要知道最大的可能性,我們取 Likelihood 公式的最大值

圖十四、Cross entropy error公式 -1

將 h 換成 w,針對有興趣的權重進行計算

圖十五、Cross entropy error公式 -2

那能不能為了方便微分等,將連乘換成連加呢?

當然可以,取 log 即可

圖十六、Cross entropy error公式 -3

將 yn wT xn 代入θ (s) 中,便可得到新的 pointwise 的式子,叫作 cross entropy error

由於這邊有一個負號,因此從求取 最大值 變成求取 最小值

至於為什麼叫 cross entropy 可以參考相關數學書籍,老師不在此介紹


圖十七、Cross entropy error公式-4

課後練習


Ans :

複習符號函數,這邊符號函數應該加入 wTx > 0 / wTx < 0 比較精確


-----------------------------------------------------------------------------------------------
[Youtube 影片40 Logistic Regression :: Gradient of Logistic Regression Error]

承前一講,我們在這邊的目標是最小化Ein(w)

最小化Ein(w):Ein(w)是連續可微分的凸函數,透過微分為零的點找到 Ein(w) 的最低點

而微分就相當於求 Ein(w) 的Gradient


圖十八、最小化Ein(w)

利用微積分的鏈鎖律,並將ln()中的式子以符號代換。

以這些符號代表的目的是為了方便運算用

圖十九、Ein(w)的Gradient

以下是推導過程,並得到與 θ() 函數有關連的式子


圖二十、Ein(w) Gradient的推導過程

求得Ein(w) Gradient 最小值(谷底),意思就是要找到使Gradient為零的w

從梯度的公式可以看得出來,它是一個以θ為權重的-YnXn總合

那θ的總和怎樣會是零呢? 

其中一個可能是它們全部都是零 (只是其中一種) 

而θ怎樣會是零呢? 

很簡單,就是它們的YnXTX遠大於零(θ 的函式可以複習上面教過得內容)

因此w和x正負號會相同,因此這些資料會是線性可分割的資料(情況較為簡單的狀況)

但是請記住,真實世界的問題沒有這麼簡單!

因此還是要乖乖的去找θ權重總合真的為零的解是多少

而且很抱歉,沒有closed-form的解答,沒有一個簡單的公式可以求得...

圖二十一、關於θ權重的總和

只好回頭到先前學過的PLA去尋求解答

先從一個起點出發,並看它哪裡有錯誤,並對它進行修正

一直進行PLA的步驟直到結束為止

圖二十二、複習PLA

為了方便討論,將前兩個步驟簡化成一個步驟

如果是錯的,就加上後面ynxn那項

圖二十三、PLA 步驟合併

更新後的式子中,可以將ynxn那項看作一個常數項乘上一個向量

常數項可以看作我們執行一次PLA,它會走幾步

向量項則能夠決定要往那個方向走

它會反覆執行好幾次,這個執行好幾次的過程,就是稱作循序的(iterative)最佳化方法

圖二十四、iterative optimization approach
課後練習


Ans :

 如果忘記了,就再次複習θ函數吧:P

-----------------------------------------------------------------------------------------------
[Youtube 影片41 Logistic Regression :: Gradient Descent]

尋求最低點的方法其中之一就是 梯度下降演算法

PLA 則是透過 v 來對權重 w 進行更新的動作,v決定方向,η (唸作eta)決定跨多大步

如果貪心的話,為了快點達到谷底,我們可以讓下降速度最快

意思就是透過調整 η (eta),讓 ηv 項最大化,使得Ein(w)變得最小


圖二十五、尋找最低點

問題來了,Ein(wt+ ηv) 依然是非線性的問題,並沒有比較好解

於是,我們可以透過局部相似(local approximation)讓原本討厭的非線性問題變成線性

那,我們是不是可以探討在向量 v 上是線性呢?

如果只看局部一小段線段, η (eta) 很小

可以將原本的式子變成以前學過得線性方程式 y = b + ax 的形式

斜率 a 就相當於∇Ein(wt)

透過探討一小段線段,我們可以把原本的式子變成泰勒展開式,變成線性的問題

圖二十七、線性相似方法

我們先將不重要的部份先用灰色的值表示,Ein(wt)是常數,η是使用者自己決定的已知數

需要探討的只有後面 vT ∇Ein(wt)這項 (∇唸作nabla) (vT為向量)

又v要求為單位向量,因此需要經過normalized

如果兩個向量方向相反,內積最小

所謂的梯度下降演算法,就是往斜率變化的反方向進行移動

只要能夠求出斜率,就能夠使用梯度下降演算法

因為一次又想要移動很多步,所以會稱作greedy

Gradient Descent

圖二十八、梯度下降演算法
Choice of η

η (eta)該怎決定呢?

先來看不好的case,一步走很小以及一步走很大的案例

太小步的話,走得會太慢,反之,則可能會非常不穩定

比較聰明的方式是坡度大的時候,走大步一點 ; 坡度小的時候,就走小步一點

因此,η應該要與 ∇Ein(wt) 正相關

圖二十九、 η 的選擇

將原來的式子進行調整一下

紫色的 η 稱作fixed learning rate,以大小適中的紫色的 η 進行學習,稱作 fixed learning

圖三十、fixed learning rate (紫色 η )

實務上不需要一定非要等到∇Ein(wt) = 0才可以,大約等於零的話就可以停止了 :)

概念上與 pocket 演算法接近

圖三十一、

課後練習


Ans :
t = 0的時候,θ(...) = θ(yn * 0 * xn) = θ(0) = 1/2,如下圖所示



-----------------------------------------------------------------------------------------------


2016年10月8日 星期六

[Udacity-Deep Learning] Quiz : Softmax

開始上 Udacity 由Google所開設的Deep Learning課程

遇到了第一個Quiz問題

想吐槽的點是,Softmax 在Udacity的影片裡面根本沒提到Softmax的演算法

就直接叫我們進行python的程式撰寫

搞了一個多小時,撞了牆之後才發現原來我根本搞錯啦 XDDDD

Wiki 中,Softmax的條目說,Softmax演算法應用於機率與機器學習等不同的領域中

"In mathematics, in particular probability theory and related fields, the softmax function, or normalized exponential,[1]:198 is a generalization of the logistic function that "squashes" a K-dimensional vector  of arbitrary real values to a K-dimensional vector  of real values in the range (0, 1) that add up to 1. The function is given by

    for j = 1, …, K."

基本上,演算法就是上面的那個運算式進行撰寫

softmax : np.exp(x) / np.sum( np.exp(x), axis = 0 )



附上Udacity論壇中有人跟我有一樣的疑惑的問題

Why do we use exponentials in Softmax ? 

關於 exp() 運算複雜的問題,有相關的stackoverflow上的問題

Why use softmax as opposed to standard normalization?
/* 載入prettify的autoloader */ /* 載入JQuery */