Sunday, August 27, 2017

[Interview] @ MediaTek

20170816 @ MediaTek 

基本關:9:00 ~ 10:00

  1. C語言
    1. p++, ++p, #macro... etc.
  2. 上機(IDE實在有夠難用)
    1. 把出現指定prefix的字串刪掉
    2. 把矩陣transpose

部門面試(多媒體,網路,處理器):10:10 ~ 11:50

  • 完全圍繞著投影片詢問問題,希望知道每個專案經驗,合作經驗的細節和想法。
    • 為什麼這個步驟這樣解決?
    • 從這個結果你學到了什麼?
    • 成績單上不同的修課狀況原因?

部門面試(多媒體,智慧電視):13:30 ~ 15:00

  • 表上寫會有四個部門,但不知道如何指出現兩位,而且表定一點整,分別晚到20, 40分鐘,似乎不知道今天有約面試一樣...。
  • 這場的投影片技術細節問的比較少,反而有口頭詢問OS一些基本觀念,其中很特別的是thread和process中的差異,就我認知threads間的共享記憶體應該除了stack(local variable)以外的segment都有共享,面試官似乎很質疑這一點...。
  • 口頭問code,如果要反轉一個string你會怎麼作...。

感想:

  • 發科面試感覺又和前面幾間非常不一樣,大多是經理或技術副理,可能和我的專業領域有差,問的東西都比較抽象一些,像是著重解決問題的思考過程,每個過程中你學到什麼,即使面試官可能也不太清楚你講出來的細節,有種抽象對談的感覺。印象只有一兩位比較有問到點上的感覺。接下來就是看成績,專案經驗和實務經驗是面試的根本,幸好有一些專案經驗,對多媒體部門都蠻有興趣的,也有DL的研發和應用,希望有機會囉。

二面:(智慧電視)

  • 是一級主管,人超好的,談的也很愉快。主要問一些新創帶team的經驗,團隊領導慾問題處理態度。感覺是少數欣賞我新創經驗的面試主管!也有問一些成績學習較差的科目,面對壓力的處理方法,自己的研究興趣和職涯想法。
  • 重視的應該是學習能力,基礎能力,興趣,團隊合作能力,善於應用等特質。

感想:

  • 不知道運氣好還是不好,原本以爲喜歡自己的部門沒機會,原以為不喜歡自己的部門卻有機會,相關的找不相關,不相關的找相關,總覺得沒有到符合預期,但也許將會是一種有趣安排吧。

20170907 @ MediaTek

一面:(多媒體)
  • 平平順順的討論我的自我介紹,主管對我的專案很有興趣,即使主管對DL沒有到非常熟悉,但可以看出公司內部的風氣,大家都有各自花時間對新技術了解,可能也是趨勢。
  • 比較特別的插曲,原以為終於有白板題的面試,結果只要求我用python寫一個class的基本架構。
  • 很幸運主管非常肯定我,當場就口頭給了我正面回應。後來竟然連二面都沒有,就拿到Offer了。蠻好奇之為什麼會有這個機會,也很好奇之前二面的電視部門主管為什麼後來沒消息。這些看來都不得而知了。


Friday, August 4, 2017

[Log], [Entropy], [KL Divergence], [Cross Entropy]

探討Machine Learning中常用的KL Divergence,Cross Entropy, Maximum Likel意義

[Log]

  • 「log math」的圖片搜尋結果
  • 訊息量:通常會用log來描述某個機率隨機變數X發生x事件的訊息量。
    I(X=x) = -log( P(X=x) )
    I -> 訊息量
    P(X=x) -> 發生x事件的機率,介於0~1之間
    log -> 當輸入介於0~1之間,函數輸出 0 => -INF, 1 => 0
  • 取負號-log使函數保有特性,機率越大的事件訊息量越小,反之則越大

[Entropy]

  • 就是對訊息量求取的期望值,希望知道某機率隨機變數的不確定程度,數值越大,不確定信越高,訊息越多,所需要的編碼也會越多。又成”
  • H(X)=Ep[ -logp(x)] =xXp(x)logp(x) 
    The formula for entropy in the case of a two-valued variable is as follows:
    Entropy = -( p * log(p) + (1-p) * log(1-p) )
    舉例BOB考試有50%會及格,STEVE有90%會及格:
    H-
    BOB(X) = - ( 0.5 * log0.5 + (1 - 0.5) * log(1 - 0.5) ) = 0.3
    H-
    STEVE(X) = - ( 0.9 * log0.9 + (1 - 0.9) * log(1 - 0.9) ) = 0.14
    BOB 不確定性遠大於 STEVE
  • 「log entropy」的圖片搜尋結果
    (以上的log皆為base-2 logarithm) -> (可以想成電腦bit的轉換)

[KL Divergence] (Kullback-Leibler) (Relative Entropy)

  • 兩個隨機p(真實)和q(估計)機率分佈之間差距的度量!
  • 記為DKL(p||q),度量q分佈的無效性。
  • DKL(p||q)=Ep[logp(x)q(x)]=xp(x)logp(x)q(x)  // E[log p(x) - log q(x)] 訊息量差的期望值
    =x[p(x)logp(x)p(x)logq(x)]
    =xp(x)logp(x)xp(x)logq(x) 
    =H(p)xp(x)logq(x) 
    =H(p)+Ep[logq(x)] 
    =Hp(q)H(p) // 推倒成兩個分部的entorpy差距,不穩定性的相差,相對
  • 確保連續性的假設:
    0log0

    0
    =00log0q=0plogp0=
     
  • if p==q, DKL(p||q)=0
  • Hp(q)表示在p的機率分佈下,使用q分佈進行編碼的不穩定性,需要的bit編碼數量,H(p)表示真實需要的編碼數。
  • KL Divergence其實很直覺的想法就是衡量估計的q來對p編碼和真實的p編碼兩者分佈的差異,以編碼數量的差,穩定性的差來表達。

[Cross Entropy]

  • 交叉熵容易和相對熵搞混,兩者關係非常緊密,但有所區別。
  • 定義如下:
    CEH(p,q)=Ep[logq]=xp(x)logq(x)=H(p)+DKL(p||q) 
  • 從上面的相對熵解釋中就可以看出來,兩個根本就是差不多的東西,只是描述的目標不同。交叉善就是Hp(q前面已經解釋過了。
  • 特别的,在logistic regression中, (B: Bernoulli distribution)
    p:真實樣本分佈,服從參數分佈為p的0-1分布,即XB(1,p) 
    q:估計出的分佈,服從參數分佈為q的0-1分布,即XB(1,q) 
  • 兩者的交叉熵:CEH(p,q) 
    =xp(x)logq(x) 
    =[Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0)] 
    =[plogq+(1p)log(1q)] 
    =[yloghθ(x)+(1y)log(1hθ(x))] 
    對所有訓練樣本取平均: 
    1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))] 
    對這格結果與通過最大似然估計方法(Maximum Likelihood)求出的結果一致。

[Maximum Likelihood]

  • 就是從現有的樣本(機率分佈q)中分析最接近真實(機率分佈p)的方法
  • 應用:Generative Model就可以用Maximum Likelihood來表達學習現有的資料,來模擬真實資料的機率分佈,進而產生結果。
  • <Maximum Likelihood>
    找出一組參數θ,可以讓 樣本機率分佈q 最大化近似 真實機率分佈p
    相當於
    <KL Divergence>
    找出一組參數θ,可以 最小化 樣本機率分佈q 和 真實機率分佈p 所需編碼的差距最小

Cross Entropy vs Mean Square Error

  • 在分類時CE比MSE更適合,最直覺的想法就是分類網路最後的輸出會經過softmax,此時的數值會介於0~1之間,此時如果用MSE去計算loss,只會越來越小,最後導致gradient小到無法訓練。

REF: