• 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22

Wenwu's blog
wenwu's blog
  • 請我喝珍奶

Popular Posts

[R]散佈圖...

2019-12-31

[SAS]L...

2020-06-10

[SAS][...

2019-07-08

[R]Log...

2019-10-31

[SAS] ...

2020-01-22

[SAS]線...

2020-02-26

[SAS]存...

2019-12-18

[SAS]迴...

2020-02-28
閱讀筆記

[閱讀心得#8] 25歲存到100萬-Shin Li 的三十堂理財觀念

by wenwu 2021-07-17

認識 Shin Li 是從youtube看到他的信用卡介紹,而且翻了翻他的頻道,內容還不少,都是講理財的內容
最近想進一步的了解投資理財,找了很多的書來看,很喜歡 Shin Li 在頻道的口才,以及講解的方法,所以買了書回來看
我覺得內容很適合新手,因為對我來說我也是剛剛加入股票的世界,有很多專有名詞我都不懂
但是Shin Li的解釋很清楚,並且有簡單的舉例
下面列出我書中最喜歡的點,和大家分享
書中還有很多內容,大家記得去買書回來看 25歲存到100萬


72法則:計算投資何時會翻倍

72/R = T 

R : 年利率、年投報率 = R%
T : 本金翻倍的年數
要怎麼計算我們投資何時會翻倍呢? 可以用上面的公式來計算
假設銀行的存活是1% ,72/1=72,表示要72年才會翻倍


要存到多少錢,才能投資

如果沒有存到這兩筆錢,千萬別貿然投資

  • 緊急預備金帳戶:至少存滿10萬
  • 儲蓄帳戶:至少存到兩個月的薪水

投資是有賺有賠的,應該劃分存款的一部分投資,而不該全部用來投資
可以使用631法則,將薪水的1/10分到投資帳戶中,等到累積到一定的金額後,再進場也不遲


第一次買股票,該怎麼挑選才好?

  • 公司市值及股本都大
    如果一個公司的股本非常大,代表不會被有心人士炒作。如果股本很小,有心人士只要稍微炒作一下,很容易就跌停或飆高。
  • 護城河多的公司
    如果這個公司是產業的龍頭,就相對穩定,也不容易被取代
    很多人在選擇股票會選擇某產業的龍頭,因為就算賠錢,也不會一次賠很多錢
  • 獲利能力好的公司
    可以去找近十年來穩定的公司。透過股利發放的方式,來評斷這家公司是不是一間持續賺錢的公司。
  • 股利連續十年穩定發放
    如果一間公司穩定,在短時間可能拓展空間有限,基本上也不會有待多增產需求,所以他會選擇把賺到的錢分給股東,而連續且穩定的發放股利
  • 計算本益比(Price-to-Earning Ratio)
    本益比=成本和獲利的比例=你買進股票之後,有多少的時間可以回本
    計算的方式是用現在股票價個除以未來預估的每股盈餘

不同的股票類型

  • 保守型股票:風險小、投報率較低
    建議選擇正確標的,並長期持有,讓時間複利帶領你的財富更上一層樓
  • 穩健型股票:風險中等、投報率中等
    如果你還年輕,可投資的時間還很長,就可以選擇穩健型的投資
  • 積極型股票:風險高、投報率高
    積極型股票會比較偏向”話題股”,有極大的可能大漲或大跌,就需要一直積極的看盤。

總結

一開始在讀這本書時,覺得前面的觀念非常簡單,好像不需要特地買來看。不過看到後面,Shin Li 給了很多很棒的觀念
這本書我會留在身邊,有需要也能夠翻翻內容
25歲存到100萬

[閱讀心得#1]原子習慣
[閱讀心得#2]歡迎來到志祺七七
[閱讀心得#3]為什麼我們這樣生活,那樣工作 The Power of Habit
[閱讀心得#4] 也許你該找人聊聊 Maybe you should talk to someone
[閱讀心得#5]加速你的FIRE人生
[閱讀心得#6]鯨吞億萬 Billion Dollar Whale
[閱讀心得#7]成為1%的創業存活者

2021-07-17 0 comment
0 FacebookTwitterPinterestEmail
機器學習

Unsupervised Learning: Deep Auto-encoder

by wenwu 2021-07-12

Unsupervised Learning: Deep Auto-encoder

今日的課程來自於: https://youtu.be/Tk5B4seA-AU

Auto-encoder 本質上就是一個自我壓縮以及解壓縮的過程,我們想要獲得壓縮後的code,他代表對原始數據的某種緊湊精簡的有效表達,也就是降維結果,其中Auto-encoder需要:

  • Encoder(編碼器): 將原先的圖像壓縮成低維的向量
  • Decoder(解碼器): 可以將壓縮的向量還原

Encoder 跟Decoder 都是 Unsupervised Learning,由於code是未知的,對於Encoder來說,我們手中的數據只能提供圖像作為NN的input,卻不能提供code作為output;對Decoder來說,我們只能提供圖像作為NN的output,卻不能提供code作為input

所以encoder跟decoder需要一起訓練,我們將他們連結,這樣整個NN的input&output都是我們已有的圖像數據,再訓練模型。最後降維的編碼就可以從最中間的hidden layer獲取


Compare with PCA

Auto-encoder跟PCA很相似,PCA本質上就是按組件拆分,再按組件重構的過程

在PCA中,我們先把均一化後的x根據組件W分解到更低維度的c,然後再將組建權重c乘上組件的反制 WT 得到重組後的x̂與原始的x越近越好

如果把這個過程當作是神經網路,那麼原始的x就是input layer,重構x̂就是output layer,中間組件分解權重c就是hidden layer,在PCA中是linear的。

對比於auto-encoder,從 input layer到 hidden layer 的案件分解實際上就是encode的過程,以hidden layer到output layer 按組件重構就是解碼的過程

並且可以加更多層的hidden layer


Deep Auto-encoder

Multi layer

我們可以不只使用一層的hidden layer,使用多層的hidden layer就是通過多層的encoder 跟 多層的decoder

  • 從input layer到bottleneck layer 的部分都屬於 Encoder
  • 從bottleneck layer到output layer 的部分都屬於 Decoder
  • bottleneck layer的output就是自編碼結果code
  • Training 方法: back propagation

如果按照PCA的思路,encoder的參數Wi 需要和Decoder的參數WiT 保持對應的關係,在訓練時可以綁在一起training,這樣就減少一半的參數,降低overfitting 的機率

但這件事情並不是必要的,實際操作時,可以對神經網路進行直接訓練而不用保持參數的一致
常見的做法就是兜個neural network, 用back propagation直接train下去

visualize

下圖為PCA和Deep Auto-encoder對手寫數字的編碼解碼後的結果,可以看出Deep Auto-encoder的方法比較清楚

若使用降維到二維平面做可視化,不同顏色代表不同數字,可以看到

  • 通過PCA降維得到的結果中,不同顏色的數字混在一起
  • 通過Deep Auto-encoder 降維得到的編碼結果中,不同顏色代表的數字被分散

Text Retrieval

Auto-encoder 也可以被用在文字處理上(將一篇文章壓成一個code)

比如我們要文字檢索,最簡單的方式就是Vector Space Model ,把每一篇文章都表示成空間中的一個vector
假設我們要查詢某個詞彙,那我們就把該查詢詞彙也變成空間中的一個點,並計算query的每一篇document之間的內積

Bag-of-word

表示詞彙最簡單的方式就是bag-of-word,如果有十萬個詞彙,就會有十萬維。缺點是很難找出詞彙的相關,每個詞彙都是獨立。

Auto-encoder

雖然bag-of-word 不能直接用於表示文章,但我們可以把它作為Auto-encoder 的input,通過降維來取得有效信息,以獲取有用的vector

同樣為了可視化,這裡將bag-of word 降維到二維平面上,下圖每個點都代表一篇文章,不同文章表示不同的文章類型


Similar Image Search

Auto-encoder 同樣可以被用在圖像檢索上

以圖找圖最簡單的做法就是直接對輸入的圖片與數據庫中的圖片計算pixel的相似度,並挑出最像的圖
片,但這種方法的效果是不好的,因為單純的pixel所能夠表達的信息太少了
我們需要使用Auto-encoder對圖像進行降維和特徵提取,並在編碼得到的code所在空間做檢索

下圖展示了Encoder的過程,並給出了原圖與Decoder後的圖像對比

這麼做的好處如下:

  • Auto-encoder可以通過降維提取出一張圖像中最有用的特徵信息,包括pixel與pixel之間的關係
  • 降維之後數據的size變小了,這意味著模型所需的參數也變少了,同樣的數據量對參數更少的模型來說,可以訓練出更精確的結果,一定程度上避免了過擬合的發生
  • Auto-encoder是一個無監督學習的方法,數據不需要人工打上標籤,這意味著我們只需簡單處理就可以獲得大量的可用數據

下圖給出了分別以原圖的pixel計算相似度和以auto-encoder後的code計算相似度的兩種方法在圖像檢
索上的結果,可以看到,通過pixel檢索到的圖像會出現很多奇怪的物品,而通過code檢索到的圖像則都是人臉

可能有些人臉在原圖的pixel上看起來並不像,但把它們投影到256維的空間中卻是相像的,可能在投影
空間中某一維就代表了人臉的特徵,因此能夠被檢索出來


Pre-training DNN

在訓練神經網絡的時候,我們一般都會對如何初始化參數比較困擾,預訓練(pre-training)是一種尋找比
較好的參數初始化值的方法,而我們可以用Auto-encoder來做pre-training

以MNIST數據集為例,我們對每層hidden layer都做一次auto-encoder,使每一層都能夠提取到上一
層最佳的特徵向量

這裡用 x-z-x 來表示一個自編碼器,其中x表述輸入輸出層的維數, z表示隱藏層的維數

  • 首先使input通過一個784-1000-784的自編碼器,當該自編碼器訓練穩定後,就把參數W1固定住,然後將數據集中所有784維的圖像都轉化為1000維的vector
  • 注意! 如果hidden layer 比input還大的時候(code 比 input 大) ,還要加一個很強的regularization!
    對1000維output做L1 的regularization,會希望這1000維的output是sparse,這1000維裡有幾維是有值的,其他都要是0
    避免auto-encoder直接把input硬背起來,再輸出的問題
  • 接下來再讓這些1000維的vector通過一個 1000-1000-1000 的編碼器,當其訓練穩定後,再把參數W2固定住,對數據集再做一次轉換
  • 接下來再用轉換後的數據集去訓練第三個1000-500-1000的自編碼器,訓練穩定後固定W3,數據集再次更新轉化為500維
  • 此時三個隱藏層的參數W1、W2、W3就是訓練整個神經網絡時的參數初始值
  • 然後隨機初始化最後一個隱藏層到輸出層之間的參數W4
  • 再用反向傳播去調整一遍參數,因為W1、W2、W3都已經是很好的參數值了,這裡只是做微調,這個步驟也因此得名為Find-tune

由於現在訓練機器的條件比以往更好,因此pre-training並不是必要的,但它也有自己的優勢

如果你只有大量的unlabeled data和少量的labeled data,那你可以先用這些unlabeled data把W1、W2
、W3先初始化好,最後再用labeled data去微調W1~W4 即可
因此pre-training在有大量unlabeled data的場景下(如半監督學習)是比較有用的

CNN

CNN as Encoder

處理圖像通常都會用卷積神經網路CNN,他的基本思想是交替使用卷積層(concolution)與池化層(pooling),讓圖像越來越小,最終展平,這個過程跟Encoder是類似的

理論上要實現自編碼器,Decoder只需要做跟Encoder相反的事即可,那對CNN來說,解碼的過程也就
變成了交替使用去卷積層和去池化層即可

那甚麼是Deconvolution和Unpooing呢?

Unpooling

做pooling的時候,假如得到一個4*4的matirx,就把每4個pixel分為一組,從每組中挑一個最大的留下

如果要做Unpooling,就需要提前紀錄pooling所挑選的pixel在原圖中的位置,下圖中用灰色框標註

然後做Unpooling,就要把當前的matrix放大到原來的四倍,也就是把2×2 matrix裡的pixel按照原先記
錄的位置插入放大後的4×4 matrix中,其餘項補0即可

當然這不是唯一的做法,在Keras中,pooling並沒有記錄原先的位置,做Unpooling的時候就是直接把
pixel的值複製四份填充到擴大後的matrix裡即可

Deconvolution

實際上,Deconvolution就是convolution

這裡以一維的Convolution為例,假設輸入是5維,過濾器(filter)的大小是3
卷積的過程就是每三個相鄰的點通過過濾器生成一個新的點,如下圖左側所示

在你的想像中,去卷積的過程應該是每個點都生成三個點,不同的點對生成同一個點的貢獻值相加;但
實際上,這個過程就相當於在周圍補0之後再次做卷積,如下圖右側所示,兩個過程是等價的

卷積和去卷積的過程中,不同點在於,去卷積需要補零且過濾器的weight與卷積是相反的

  • 在卷積的過程中,依續是橘線、藍線、綠線
  • 在去卷積的過程中,依序是綠線、藍線、橘線

因此在實踐過程中,去卷積的時候可以直接做Convolution就可以了

2021-07-12 0 comment
0 FacebookTwitterPinterestEmail
閱讀筆記

[閱讀心得#7]成為1%的創業存活者

by wenwu 2021-06-28

[閱讀心得#7]成為1%的創業存活者

貝克街王繁捷如何以20萬創造5000萬業績?如何用一塊蛋糕年賺千萬

好像是在yale 的 Instagram看到他讀這本書,然後慢慢才對這本書有一點興趣。而且廣告打得很強,害我漸漸想讀這本書,知道王繁捷這個人是誰?他的蛋糕是怎麼賣的?

在讀這本書之前,我不知道貝克街蛋糕,也不知道王繁捷
我是因為這本書才知道,他這個人以及他的蛋糕品牌的。
只能說他的行銷做的很不錯,我不太會花錢買高單價蛋糕,但是也認識了貝克街
而且訂閱貝克街的內容相當不錯,我記得寄到信箱不是廣告,而是一篇行銷內容分享
這反而引起我的興趣,就像書裡寫的,沒有靈魂的廣告是無法吸引人的
讀完這本書的感覺是,他真的將很多創業的內容寫至書中,讓人很輕易的了解創業的細節
但是最重點的是,我真的覺得他很會行銷,看完書好像必須來體驗看看貝克街的商品(整本書就是最好的廣告XD)

如果你要創業一定要讀這本,或者你只想了解創業的血汗史,也可以把書帶回家 成為1%的創業存活者
下面簡單摘入我最喜歡的部分


創業前必備的四個能力

如果你正在想你要不要創業,你可以用這四個實力測試看自己

  • 實力
  • 抗壓力
  • 溝通力
  • 解決力

很多地方可以測試這些能力,像大學社團、各樣的比賽
其實看完第一篇,應該就有很多人打退堂鼓了,因為創業真的不是一件簡單的事情
就像馬克斯說的:如果你需要別人鼓勵,那你不適合創業


不要隨便相信專業

如果你讀完一整本書,你就知道王繁捷有很多事情都自己來:廣告投放、行銷、文案
這些東西都可以外包給別人,但其實自己來也可以達到同樣效果,甚至更好

我很喜歡書裡面寫的,如果你自己下手寫這些東西,才會有你的風格
有時候簡單的東西,就能夠看出這個是你的品牌

有些事,反而自己做比較好


最容易忽略的隱形成本

  • 税:營業稅、營所稅、個人所得稅
  • 勞健保:員工和老闆的勞保、健保、勞退
  • 廣告費:網路行銷、店面租金、廣告公司
  • 老闆自己的薪水

大家很容易忽略這些,尤其是忘記算自己的薪水,如果你一個月做多少產本,就需要將自己的薪水平均在這些產品中


想像一下,如果你做這件事賠錢,你需要多久才能賺回來,幾個月嗎?還是幾年?
如果幾個月的話,王繁捷說他會馬上去做
但是幾年的話,他可能就不會下手了
所有器材買不了最貴,只買得了CP值最高的
這就是創業者需要做出的抉擇,每一步都精打細算,只為了走的長久

在書裡也提到很多創業定位的觀念,簡單而且清楚
我覺得這本書是貝克街最大的廣告 大家不妨買回家看吧
成為1%的創業存活者

2021-06-28 0 comment
0 FacebookTwitterPinterestEmail
閱讀筆記

[閱讀心得#6]鯨吞億萬 Billion Dollar Whale

by wenwu 2021-05-24

鯨吞億萬 Billion Dollar Whale

一位大馬華人,行騙華爾街以及好萊塢的真實故事。

不得不說這真的是一本很精彩的書。沒有想到這場為期十幾年,高達數百億美金的行竊就發生在真實人生,並且劉特佐還逍遙法外。

老實說我對金融的世界並沒有多少的認識,但是這本書從劉特佐小時候開始說起,從頭到尾詳細的敘述劉特佐是如何從一個普通富裕的家庭,攀關係到大馬首相、各國國王以及首相,並輕而易舉的在華爾街、好萊塢中有影響的地位。


首先,必須從青少年的劉特佐說起,劉特佐到別人家的豪宅中,擅自換掉別人家的照片,換成自己與家人的照片,並且留念。劉特佐在大學的時候,開了一場一場的生日配對,令同學誇眼相看,大家都傳說著他是馬來西亞的王子(如果了解馬來西亞就會知道這是一個笑話,馬來西亞根本沒有王子),更傳說他是亞洲gasbey (大亨小傳的主角)。但是其實派對的經費,只付了頭期款,之後還拜託酒吧分期付款,打折才付完。

的確蠻有趣的,劉特佐似乎喜歡過這樣的生活,就算他其實沒有能力,想盡辦法也要過到這種生活。

劉特佐很重視人脈,他也很容易看到人的需要。當初他就是牽線大馬的首相以及沙烏地阿拉伯的王子,開始了這個掏空馬來西亞至少百億美元的一馬企業(一個馬來西亞發展有限公司)

一開始,首相納吉相信,這樣的合作可以帶來馬來西亞的經濟發展,提供十億美元的資金。但是劉特佐並沒有在一馬公司掛名,卻有絕對的權利。在這十幾年的過程中,用無數的空殼公司,騙過金融界的高手,一個洞一個洞鑽。不斷的需要有人提供資金填補漏洞。

在這本書提到很多精彩的過程:

  • 投資“華爾街之狼”,在好萊塢和各大知名明星中走跳
  • 隱匿資金,投資房地產
  • 洗錢,高價購買名畫
  • 發出35億美金的基金、垃圾金融商品
  • ….

到最後,終於有人揭穿一馬公司的真相。但是最倒霉的是馬來西亞的人民…


書中很詳細的提到劉特佐行騙世界各地的惡行。連我這個門外漢也能夠簡單的讀懂。
如果想買新書可以直接從博客來購買喔:鯨吞億萬

2021-05-24 0 comment
1 FacebookTwitterPinterestEmail
機器學習

Unsupervised Learning: Neighbor Embedding

by wenwu 2021-05-20

Unsupervised Learning: Neighbor Embedding

今天要介紹的是一種非線性的降維方法,就是Neighbor Embedding

Manifold Learning

很多時候我們的樣本分佈可能在一個高維空間,但是樣本的分布點可能只是在低維空間裡面,被扭曲到高維空間中。像是地球表面就是一個Manifold,他是一個二維平面,卻被塞到三維空間裡

在Manifold中,只有距離很近的點可以使用歐式距離(Euclidean Distance)。Manifold Learning 要做的就是把塞在高維空間的低維空間攤平。


Locally Linear Embedding

局部線性嵌入,Locally Linear Embedding,簡稱LLE

假設在原來的空間中,樣本點的分佈如下所示,我們關注 x^i 和它的鄰居x^j ,用 w_ij 來描述兩者的關係
假設每一個樣本點都是可以用它的neighbor做linear combination組合而成,那 w_ij 就是拿 x^j 去組合 x^i 時的權重weight,因此找點與點的關係 w_ij 這個問題就轉換成,找一組使得所有樣本點與周圍點線性組合的差距能夠最小的參數 w_ij

接下來就要做Dimension Reduction,把 x^j和 x^i 降維到z^j和 z^i,並且保持降維前後兩個點之間的關係 w_ij 是不變的

LLE的具体做法如下:

  • 在原先的高維空間中找到 x^i 和 x^j 之間的關係 w_ij 以後就把它固定住
  • 使 x^i 和 x^j 降維到新的低維空間上的 z^j和 z^i
  • z^j和 z^i 需要minimize下面的式子:
  • 即在原本的空間裡,x^i 可以由周圍點通過參數 w_ij 進行線性組合得到,則要求在降維後的空間裡, z^i 也可以用同樣的線性組合得到

實際上,LLE並沒有給出明確的降維函數,它沒有明確地告訴我們怎麼從x^i降維到z^i ,只是給出了降維前後的約束條件
在實際應用LLE的時候,對x^i來說,需要選擇合適的鄰居點數目K才會得到好的結果
下圖給出了原始paper中的實驗結果,K太小或太大得到的結果都不太好,注意到在原先的空間裡,只有距離很近的點之間的關係需要被保持住,如果K選的很大,就會選中一些由於空間扭曲才導致距離接近的點,而這些點的關係我們並不希望在降維後還能被保留

222

Laplacian Eigenmaps

另一種方法叫拉普拉斯特徵映射,Laplacian Eigenmaps

如果 x^i 和 x^j 在high density區域上是相近的,即相似度 w_ij 很大,則降 維後的 z^i 和 z^j 也需要很接近,總體來說就是讓下面的式子盡可能越小越好

注意,與LLE不同的是,這裡的 w_ij 表示x^i 和 x^j這兩點的相似度,上式也可以寫成

但光有上面這個式子是不夠的,假如令所有的z相等,比如令z^i=z^j=0,那上式就會直接停止更新

在semi-supervised中,如果所有label z^i 都設成一樣,會使得supervised部分的 ΣC(y^r,y^r(估計值))變得很大,因此lost就會很大,但在這裡少了supervised的約束,因此我們需要給 z 一些額外的約束:

  • 假設降維後 所處的空間為M維,則{z¹,z², … , z^N} =R^M ,我們希望降維後的 z 佔據整個M維的空間,而不希望它活在一個比M更低維的空間裡
  • 最終解出來的 z 其實就是Graph Laplacian L 比較小的特徵值所對應的特徵向量

這也是Laplacian Eigenmaps名稱的由來,我們找的 就是Laplacian matrix的特徵向量 如果通過拉普拉斯特徵映射找到 之後再對其利用K-means做聚類,就叫做譜聚類(spectral clustering)


t-SNE

t-SNE,全稱為T-distributed Stochastic Neighbor Embedding,t分佈隨機鄰居嵌入

shortage of LLE

前面的方法只假設了相鄰的點要接近,卻㡪有假設不相近的點要分開

所以在MNIST使用LLE會遇到下圖的情形,它確實會把同一個class的點都聚集在一起,卻沒有辦法避免不同class的點重疊在一個區域,這就會導致依舊無法區分不同class的現象
COIL-20數據集包含了同一張圖片進行旋轉之後的不同形態,對其使用LLE降維後得到的結 果是,同一個圓圈代表同張圖像旋轉的不同姿態,但許多圓圈之間存在重疊

How t-SNE works

做t-SNE同樣要降維,在原來x的分佈空間上,我們需要計算所有 x^i 與 x^j 之間的相似度 S(x^i,x^j)
然後需要將其做歸一化: P(x^j|x^i),即x^i 與 x^j的相似度佔所有與 x^i 相關的 相似度的比例
將x降維到z ,同樣可以計算相似度S’(z^i,z^j),並作歸一化

注意,這裡的歸一化是有必要的,因為我們無法判斷在 x 和 z 所在的空間裡, S(x^i,x^j) 與S’(z^i,z^j) 的範圍是否是一致的,需要將其映射到一個統一的概率區間
我們希望找到的投影空間 z,可以讓 P(x^j|x^i) 和Q(z^j|z^i)的分佈越接近越好

How to use

t-SNE會計算所有樣本點之間的相似度,運算量會比較大,當數據量大的時候跑起來效率會比較低

常見的做法是對原先的空間用類似PCA的方法先做一次降維,然後用t-SNE對這個簡單降 維空間再做一次更深層次的降維,以期減少運算量

值得注意的是,t-SNE的式子無法對新的樣本點進行處理,一旦出現新的 x^i,就需要重新跑一遍該算法,所以t-SNE通常不是用來訓練模型的,他更適合用於估定數據的可視化

t-SNE常用於將固定的高維數據可視化到二維平面上


Conclusion

  • LLE(Locally Linear Embedding),局部線性嵌入算法,主要思想是降維前後,每個點與周圍鄰居的線性組合關​​係不變
  • Laplacian Eigenmaps,拉普拉斯特徵映射,主要思想是在high density的區域,如果x^i、x^j 這兩個點相似度w_ij 高,則投影后的距離叫小
  • t-SNE(t-distribution Stochastic Neighbor Embedding),t分佈隨機鄰居嵌入,主要思想是,通過降維前後計算相似度由RBF function轉換為t-distribution,在聚集相似點的同時,拉開不相似點的距離,比較適合用在數據固定的可視化領域
2021-05-20 0 comment
0 FacebookTwitterPinterestEmail
機器學習

Unsupervised Learning: Word Embedding

by wenwu 2021-05-12

Unsupervised Learning: Word Embedding

Word Embedding(詞嵌入)就是將文字轉成向量的方法,也是降維(Dimension Reducion)的典型應用,那要如何用vector來表示一個word呢?

1-of-N Encoding

最傳統的方法就是1-of-N Encoding,這個vector的維度就等於世界所有單辭的數目,對每個單詞來說,只要某一個維度=1,其他等於0即可。
但是我們無法取得文字資訊,也無法建立同類word的聯繫

Word Class

word class將同類性質的word進行分類(clustering)。但是分類事不夠的,不同class之間的聯繫無法有效的表示出來

Word Embedding

Word Embedding把每一個word都投影到高維空間上,當然這個空間的維度要遠比1-of-N Encoding的維度低,假如後者有10萬維,那前者只需要50~100維就夠了,這實際上也是DimensionReduction的過程

類似語義(semantic)的詞彙,在這個word embedding的投影空間上是比較接近的,而且該空間裡的每一維都可能有特殊的含義。假設詞嵌入的投影空間如下圖所示,則橫軸代表了生物與其它東西之間的區別,而縱軸則代表了會動的東西與靜止的東西之間的差別

word embedding是一個無監督的方法(unsupervised approach),只要讓機器閱讀大量的文章,它就可以知道每一個詞彙embedding之後的特徵向量應該長什麼樣子

我們的任務就是訓練一個neural network,input是詞彙,output則是它所對應的word embedding vector,實際訓練的時候我們只有data的input,該如何解這類問題呢?

basic idea

word embedding 基本的精神就是,每一個詞彙的涵義都可以根據上下文來的到。有兩種做法來找出word embedding 的vector,分別是count based 和 prediction based

count based

假如w_i和w_j這兩個詞彙常常在同一篇文章中出現(co-occur),它們的word vector分別用V(w_i)和V(w_j)來表示,則V(w_i)和V(w_j)會比較接近

假設N_ij是w_i和w_j這兩個詞彙在相同文章裡同時出現的次數,我們希望它與的內積越接近越好,這個思想和之前的文章中提到的矩陣分解(matrix factorization)的思想其實是一樣的

prediction based

給定一個sentence,我們要訓練一個神經網路,他要做的就是根據當前的word : w_i-1,來預測下一個可能出現的word : w_i是什麼

假設我們使用1-of-N encoding把w_i-1表示成feature vector,它作為neural network的input,output的維數和input相等,只不過每一維都是小數,代表在1-of-N編碼中該維為1其餘維為0所對應的word會是下一個word 的概率

把第一個hidden layer的input z_1、z_2、z_3 …. 拿出來,它們所組成的 Z 就是word的另一種表示方式,當我們input不同的詞彙,向量Z就會發生變化

也就是說,第一層hidden layer的維數可以由我們決定,而它的input又唯一確定了一個word,因此提取出第一層hidden layer的input,實際上就得到了一組可以自定義維數的Word Embedding的向量

sharing parameters

詞彙由於搭配的方式千千萬萬,即使是人也無法準確的給出下一個詞彙具體是什麼。我們可以擴展這個問題,使用10個以上的詞彙去預測下一個詞彙,會得到較好的結果

這裡用兩個詞彙舉例,如果是一般神經網路,我們直接把w_i-2、w_i-1相連的weight都綁再一起,簡單來說就是相同dimension對應到第一層hidden layer相同neuron之間的連線擁有相同的weight,在下圖中,用同樣的顏色標註相同的weight:

如果我們不這樣做,不同weight的結果導致得到的Embedding 會是不一樣的,把兩組weight設定相同,使w_i-2、w_i-1的相對位置不會對結果產生影響

除此之外,共享參數還可以有效的減少參數量,不會因為input的詞彙增加而導致參數量暴增

Formulation

假設w_i-2的1-of-N編碼為x_i-2,w_i-1的1-of-N編碼為x_i-1,維數均為|V|,表示數據中的word總數hidden layer 的input 為向量z ,長度為|Z|,表示降為後的維數

其中W1和W2都是|Z|x|V|維的weight matrix,它由|Z|組|V|維的向量構成,第一組|V|維向量與|V|維的x_i-1相乘得到z1,第二組|V|維向量與|V|維的x_i-2相乘得到z2,…,依次類推
我們強迫讓W1=W2=W,此時z=W(x_i-2 + x_i-1)

因此,只要我們得到了這組參數X,就可以與1-of-N編碼x相乘得到word embedding的結果z

In Parctice

在實際操作上,我們如何保證W1和W2一樣呢? 
以下的w_i 與 w_j 為例,我們希望他們的weight是一樣的:

  • 首先在訓練的時候就要給他們一樣的初始值
  • 然後分別計算 loss function C 對 w_i 和 w_j 的偏微分,進行更新
  • 這個時候就會發現,偏微會不一樣,所以我們在後面加了對方的偏微,保證兩者的結果更新必須一致
  • 這個時候,我們保證了w_i 和 w_j始終相等:

如何去訓練這個神經網絡呢?注意到這個NN完全是unsupervised,你只需要上網爬一下文章數據直接餵給它即可


various architectures

除了以上的基本型態,prediction-based 方法還可以有多種變形

  • CBOW(continuous bag of word model) 
    拿前面的詞彙預測中間的詞彙
  • Skip-gram
    拿中間的詞彙預測前後的詞彙
  • Multi-domain Embedding 
    對圖像做embedding
  • Document Embedding 
    對圖像做embedding
  • Subtraction 機器問答
    機器不知道字與字之間的關係,但是可以用簡單的推論(減法)來推論這些關係,像是羅馬之於義大利等於柏林之於什麼,機器可以知道
    V(Germany)≈V(Berlin)-V(Rome)+V(Italy) 
    藉此推論答案時德國
  • Multi-lingual Embedding 
    建立不同文字間的聯繫,我們訓練英文與中文的資料庫是沒有連結的,所以訓練時要使用中英混雜的input,提供機器學習得內容

最後,儘管word vector 是deep learning 的一個應用,但是這個neural network 其實並不是 deep 的,他就只有一個linear 的 hidden layer

我們把1-of-N編碼輸入給NN,經過weight的轉換得到Word Embedding,再通過第一層hidden layer就可以直接得到輸出

其實過去很多人使用過deep model,但這個task不用deep就可以實現,這樣做既可以減少運算量,跑大量的data,又可以節省訓練的時間

2021-05-12 0 comment
0 FacebookTwitterPinterestEmail
Load More Posts

近期文章

  • [SAS] Macro Language 基礎內容
  • ccClub 讀書會推薦,免費學python
  • [閱讀心得 #21]你願意,人生就會值得
  • 理想生活,該長怎麼樣子?
  • 多益330 → 多益785 多益成績棕色到藍色證書

近期留言

  • 「peter」於〈多益330 → 多益785 多益成績棕色到藍色證書〉發佈留言
  • 「wenwu」於〈[SAS]存活分析(2) COX regression model〉發佈留言
  • 「joey53111」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「丁柏仁」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「peter」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言

免費訂閱

不定期更新文章,點一下追蹤就能夠收到最新文章!

一起加入其他 19 位訂閱者的行列

Statistics

  • 11,133
  • 592,816
  • 73
R 線上課程參考

@2019 - All Right Reserved. Designed and Developed by PenciDesign

Wenwu's blog
  • 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22