2016/5/16

Deep Learning 筆記

IEEE Big Data Congress 2016 (海量資料國際研討會台北場)春季學校和主題演講
https://uknowiknow.com/courses/1a319e3ac7865c57

透過視覺化Neuron來觀察和學習 Deep Learning 的運作
http://playground.tensorflow.org/

每一個Neuron都是在做輸入x 輸出 y
y = g(wx + b)  (y 跟 b 是純量,w 跟 x 是向量,g 是 Activation Function)

除了 Input Layer 和 Output Layer ,中間的 Layer 都叫作 Hidden Layer

給預期的Output,用 Gradient Descent 演算法去更新每一個 Neuron 的 w 跟 b ,目標是使得 Loss 最小。

Loss = (預期的Output - Output Layer)^2

Mini Batch 是每次計算 Loss 時不使用全部的Training Data,而是只使用部分的 Training Data

使用 Mini Batch 可以避免掉入一些 Local Minimum

Back Propagation 是更快的微分技術

Case Study:手寫數字辨識
題目描述:給一張手寫數字(一位數)的點陣圖,輸出對應的數字
網路結構:在 Network 上的 Input Layer 是所有 pixel (w*h個 Neuron ),輸出是10個 Neuron ,分別代表手寫數字為0~9的機率,當輸出向量代表 0 的 Neuron 輸出值最大時,代表辨識結果為0。

圍棋:
給盤勢(19*19),輸出下一步下子位置(19*19)

利用多個是非題( Neuron )可以實作出選擇題

Network 結構目前沒有辦法靠學習來自動生成

Universality Theorem
Deep 比較好還是 Fat 比較好?
Fat +Short v.s. Thin + Tall
答案是 Thin + Tall 勝出

Deep network 隱含模組化( Modularization )的概念
一個選擇題被拆解成幾個是非題( Hidden Layer )之後再合成
Deep 之後需要的 Training Data 變少



有哪些調整方法可以讓 Training Data 的 Loss 降低:
Adagrad:調整 Learning Rate,讓每一個參數(w,b)有自己的Learning Rate

Momentum:加入移動的慣性到參數的update上

Corss Entropy:換掉兩個向量的距離估計函數,建議搭配 Softmax 使用

ReLU(Rectified Linear Unit):線型的 Activation Function 才不會在多層次的時候造成計算微分時因為多層次的關係被遞減。

Maxout(自動生成 Activation Function),用多個 Neuron 取最大的輸出去組成一個 Neuron

Residual Network:跳過2個 Layer,直接連接到後面的 Layer
Highway Network:跳過N個 Layer


有哪些調整方法可以讓 Testing Data 的 Loss 降低(對抗Overfitting):

更多的 Data
生成更多的 Data (把原圖做一些旋轉)
生成更多的 Data (加入雜訊)

Early Stopping:把手上的 Training Data 拿一些做驗證,當驗證 Data 的表現沒有再進步時,就停止

Weight Decay:使得 Weight 的大小越小越好

L2 Regularization:一種 Weight Decay 方法,把 Weight 的長度加入 Loss Function

Ensemble:嘗試各種Network Structure,再把結果合起來。

Dropout:在每一次遞迴的時候都把 Network 上的 Neuron丟掉一部份,等同於Ensemble的終極版。

Recurrent Neural Network (RNN):有記憶的NN
每一個 Neuron 對上一個輸入資料的輸出被保留在 Hidden Layer 上。或者說 Neuron 都跟上一次的自己建立連線。

Bidirectional RNN:時間逆序+時間順序

LSTM:在 Neuron 跟自己建立關聯之前加上3個Gate:Input  Gate,Output  Gate,Forget Gate

BPTT:RNN的計算方法

CASE :
Slot Filling:輸入一個 word,輸出這個 word 是屬於哪一個 Slot?
Slot:dest(目的地),time(時間),other
input : arrive Taipei on November 2nd
理想中的output : other dest other time time

word 怎麼表示成向量?
1-of-N Encoding:{apple,bag,cat,dog,elephant}
apple = [1 0 0 0 0]
bag = [0 1 0 0 0]
cat = [0 0 1 0 0]
dog = [0 0 0 1 0]
elephant = [0 0 0 0 1]

word embedding:
為了不要讓word的向量太多維度,作降維的方法是把所有的word放到一個n-D空間上,語意上越接近的字就放在一起。

skip-gram text model:
Windows - Microsoft + Google = Android

Attention-based Model:讓機器可以回答問題
用DNN/RNN去選擇該讀取哪些資料,作為一個新的input,直到他找到答案。

Deep Reinforcement Learning
更難的問題


參考資料:

線上觀察deep learning的運作
http://playground.tensorflow.org/

Tensorflow 是一個用C++跟Python實作的deep learning library
用起來跟numpy有90%像

SyntaxNet

OpenAI

Parallel Game Engine

電腦視覺

2016/5/5

TeSA「成長駭客」台灣駭客導讀會 筆記

活動連結:https://tesa.waca.ec/product/detail/3967



​Q:怎麼確定PMF?

小黑:確認使用情境:確定目標消費者在什麼時間什麼地點去解決什麼問題?真的有這個情景嗎?

貝克菜:已有產品:去觀察競品的文案、競品的客群。去人肉你的客群,觀察客群的特徵。
沒有產品:先找受眾,再找對應的產品。打3000元廣告去看效果,效果差表示產品不對。

酸哥:發傳單超棒的。還有簡訊,想檔都檔不掉。不要受限於網路。



Q:怎麼抓到一開始的客戶,一開始的資源要怎麼投入?

酸哥:客群是用測試來的,不是用刻板印象。測試工具不一定準,你們真的相信民調嗎?

貝克菜:看見自己需要的問題並且解決問題,自己沒有在用的情況下,觀察有在用的人提出的問題。

小黑:論壇、問答網站,那裡的人有一堆的問題,你的東西到底要怎麼用?去問答網站上回應,還可以順便做SEO。在行銷時盡量獲取準客戶的聯絡方式。你不會想要按補習班的讚,但是你會按「看OOO學英文」的讚。開這種粉絲團,再辦實體活動,取得會員名單後瘋狂轟炸他們。



Q:當自己無法成為意見領袖的時候,該怎麼選擇適當的意見領袖來合作?

酸哥:所有的行銷工具都有他的用處,200個素人可以贏過1個A級部落客。可以賺SEO跟分散風險。先想好自己產品定位,再去找合適的人。不要看到別人做什麼,就跟著做什麼。很多代言人平常根本不用那些產品,那樣的行銷會有用嗎?目標放清楚,要找對人。不要找硬是要學去賣化妝品。網路正妹有兩種:男生會看的正妹,跟女生會看的正妹,不要找錯人了。

貝克菜:粉絲多不一定有效,你確定他們的粉絲符合自己產品的性質嗎?很多時候素人比名模有效。應該多研究粉絲的輪廓,選擇那些粉絲跟產品的受眾輪廓接近的意見領袖。多收集2000~3000人追蹤者的素人,直接送產品給他們。

小黑:部落客行銷對SEO的幫助很大,你可以在GOOGLE搜尋競品、產品、關鍵字,排名在前面的Blog,就是適合的對象。現在有很多騙吃騙喝部落客,怎麼判斷?流量高但是沒互動的不要找,我們要這群部落客來當我的第一批客人,大部分的部落客其實是早期使用者,可以連帶進行早期使用者開發。



Q:怎麼引爆病毒行銷?

小黑:遊戲化、跟生活有關,星座文最會被分享,算得準會被分享,但是算不準也會被分享。

貝克菜:先有營業額再說,pass。

酸哥:網路4G法則 (Girl、Game、Gambling、Gift)。 賭:問卷調查,選到人多的那邊的人群中抽出一些獎項。



Q:負面行銷、bug行銷、標錯價格行銷可以用來操作嗎?

小黑:大多數的負面行銷是不小心的,不建議操作這個,標錯價格行銷買不到長久的顧客,超低價行銷可以視為買新客人的一種方式。

貝克菜:這種東西不見得會成功,所以不會浪費時間去試。

酸哥:負面行銷的關鍵是在危機公關的處理方式,發生事情時表示道歉和賠償,重點是誠信要保住。負面的事情一定會碰到,不要主動去操作,但是遇到時要會處理。



Q:怎麼挑選人才,一個成長駭客應該具備什麼?

貝克菜:勇氣、多嘗試新事物的心態,不需要精通,但是要懂很多東西。可以丟一個很難的問題給他,看他處理問題的方式,需要一個願意一直找答案的人。



Q:成長駭客跟T型人才的差別,技術優先還是行銷優先?

貝克菜:要有程式的概念,知道哪些事情是程式能完成的,要懂消費者心理學,看數據才懂背後的意義,能懂人性才是最重要的。



Q:如何提升客戶終身價值(retention)?

小黑:設計永續使用情境,而不是做一些花俏手法。

貝克菜:根據資料計算客戶什麼時候需要購買下一次,就在那個時候去打他,即時提醒很重要。我
不喜歡削價促銷的手法。對於非消耗品的操作法是:因為你只會買一次,所以我跟你保證,如果你東西壞掉,就讓你用半價購買新品。

酸哥:kkbox 讓你可以更快地買演唱會的票。你的歌單都在kkbox上,轉換到另一個平台很難。餐廳定時換菜單,建立制約。為什麼大家在造節?為什麼情人節就是要送禮?建立制約。這些都是延續產品時間的策略。



Q:最重要需要最先優化三個項目的是什麼?

貝克菜:觀察員工平常都在幹嘛,看看那些重複繁瑣的事情,想辦法優化流程。如果有1000個人打電話來問同一個問題,你就應該把這個寫在網站上重要的地方。任何一個地方都可以優化,這需要一些觀察力跟敏銳度。

酸哥:產品、財務、法務很重要。如果你是為了創業而創業,那你就可以出去不用聽了。重點是你一定要知道自己在幹嘛。

小黑:你要關注平均會員獲取成本、平均訂單獲取成本,成本控制好就可以一直丟廣告,最後是如何提高會員的終身價值。

2016/4/28

Sublime Text 的 Reg Replace 套件


http://facelessuser.github.io/RegReplace/

Reg Replace 可以按照你指定的順序作一系列的 Regex Relpace ,當你每次都需要整理某種特定的文件內容的時候,你可以寫好一套規則,接下來所有的文件來只需要按一鍵就可以完成所有該做的修改。

舉個例子:如果我們想要把所有的 a 都變成 b


點擊 Settings - User 後寫入下面的文字

{
    "replacements": {
        // Example replacements
        "a to b": {
            "find": "a",
            "replace": "b",
            "literal": true,
            "greedy": true,
            "case": true
        }
    }
}

點擊 Commands - User 後寫入下面的文字

[
    {
        "caption": "Reg Replace: test a to b",
        "command": "reg_replace",
        "args": {"replacements": ["a to b"]}
    }
]




點擊 Tools 的 Command Palette...




在文字框輸入 Reg Replace: test a to b 後按下enter 或選取下面的 Reg Replace: test a to b
然後你目前在編輯的所有 a 都會變成 b

2016/3/31

信仰之力 - 相信自己沒有能力

信仰是一種紓壓管道。

有些自己應該承擔的責任,自己不想承擔的時候,我們可以找到一個對象:祂。祂應該承擔這個責任,而不是我。我的命運是祂決定,而不是我決定,這就是信仰。

所以信仰是一種卸責手段,不管那個對象是誰,只要認為對象存在即可。即使那個對象是個人類。

我信自己。

自己的命運,自己掌握。

2016/3/28

建立開發團隊與企劃團隊之間的默契


對一般人來說,手算會比心算還要快找到最佳解。所以理想的開發團隊是扮演所見即所得的產品開發工具給企劃團隊,讓企劃團隊可以直接看見心裡所想的設計。於是企劃團隊可以每秒都在變更規格,而開發團隊每秒輸出對應的產品提供給企劃團隊。對企劃團隊來說是心想事成。

在開發的前期階段,開發團隊擔任企劃團隊的助手,這個階段會透過製作原型來驗證企劃的可用性,和實作的可行性。開發團隊必須用最短的時間做出可測試的原型,以增加迭代速度。

有時候會遇到企劃團隊提出看似無理的需求。可能是開發團隊的技術能力不佳,或是系統不支援的關係,估計需要花很長的時間才能做出,或者根本做不出來。造成開發團隊跟企劃團隊之間的衝突。此時,開發團隊會開始質疑企劃團隊的設計能力,企劃團隊會開始質疑開發團隊的技術能力。

開發團隊:你又在亂搞,我從沒看過有人這樣設計。

企劃團隊:是你太弱吧,什麼東西都用系統內建的,怎麼可能做出好設計?

在雙方溝通不良的情況下,氣氛會變得很糟,被夥伴嫌弱的感覺不太好。若開發團隊不能打從心裡覺得企劃團隊丟出來的規格很棒,就會失去認真工作的動力,工作的時候就做得很慢很不開心。

如果時程允許,我認為在開發團隊質疑企劃團隊的設計能力之前,應先把原型實作出來,先證明自己的技術能力沒有問題,再用原型去說服企劃團隊修改設計。

開發團隊:我、我才沒有認同你的設計呢,我只是想證明自己的技術能力沒有問題。

若開發團隊有自己的設計想法,就應該連同自己的設計也做出一個原型,拿著兩個原型去說服企劃團隊,才會是一個良好的溝通過程。

企劃團隊:看到你的原型,我終於知道你在講啥了。

開發團隊跟企劃團隊都使用原型來溝通,就不會有溝通不良的問題,等雙方有默契了可以再嘗試用想法來溝通。

默契是經過一段時間磨合才會產生的東西。