iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 30
1
AI & Data

Knock Knock! Deep Learning系列 第 31

Day 30 / 結語與 Checkpoint 解答

30 天挑戰終於完成了,終於恢復自由身了!這 30 篇不只是傳遞分享知識的過程,更是讓自己鞏固加深原有的知識,這也是寫技術文最大的收穫。

回顧這一系列,從 deep learning 的基本原理和實作時需要的先備知識開始講解起,接著簡單利用 MNIST 任務來介紹如何用 PyTorch 架構自己的 model。接著進入應用篇,分別為 DL 在 NLP、CV、及 RL 三大領域的發展開了子系列文,除了介紹各自主要的架構,更多的是經典或新潮學術成果的分享,以及獻醜自己在 Stanford 修課時做的 project,希望讓讀者未來想開始做 project 時對方向和規模有大致的概念。

每一篇都是經過查詢很多參考資料、文獻濃縮而來,時而自己做圖、寫 code,產出 30 篇以學生角度出發的分享文。如有不嚴謹或凌亂的地方,或是覺得實作不夠多,我只能說在有限的篇幅和時間內我真的盡力了,很抱歉!也謝謝願意閱讀的各位。

Checkpoint 解答

每篇文下都有自己設計的 checkpoint 供讀者審視自己的理解是否完全。接著我們就提供每篇的參考解答。

Day 1

  • 一個簡單的 Perceptron 有哪些基本步驟?
    • Input 接收訊息、weights 分配權重、summation and bias 整合訊息、activation 激發、output 輸出訊息。
  • Perceptron 為何能力受限?
    • Perceptron 只能做 binary linear classification,但真實世界的 dataset 很多都需要做 multiclass non-linear classification。
  • Bias 的作用為何?
    • 得出的值需要一個判斷標準,bias 類似這個標準。
  • Neural Network 為何需要分層?
    • 前面幾層處理粗糙訊息,傳到後面幾層學習高階的概念,不同高階概念可以共享不同粗糙訊息進行學習。如果只有一層但很多 node,學習不如分層有效率。
  • Neural Network 有哪些不同學習方式?他們的主要差別為何?
    • Supervised learning 從正確答案中學習;unsupervised learning 從大量沒有 label 的 data 學習,例如 clustering;reinforcement learning 沒有答案也不需要 data,藉由和環境互動獲得反饋調整自己的行為。

Day 2

  • Neural Network 的終極目標為何?
    • 做函數擬合:給定 feature x 和預測目標 y,擬合 f 使 https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%5Capprox%20y
  • 訓練 Neural Network 的大致流程為何?
    • 準備好 dataset、輸入 feature x 預測 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%7By%7D、計算預測與正確答案的 loss、將 loss backpropogate 給 network 進行參數修正。
  • 用 vector 和 matrix 來表示 data 有哪些好處?
    • 讓 feed-forward 步驟能以 matrix multiplication 形式進行,且電腦能優化運算。
  • 試著從上面 matrix summation 的範例圖,標示每條線對應到 W 裡的值。
    • answer
  • Activation function 有哪些條件?
    • Derivative 容易計算,且適用於訓練。
  • Softmax function 常被應用在哪種任務?
    • Classification 分類問題。

Day 3

  • MSE 和 cross-entropy loss 分別適用於哪些情況?
    • MSE 適用於預測數值的 linear regression,cross-entropy loss 適用於預測機率值的 logistic regression / classification。
  • Gradient descent 的目的是什麼?為什麼會被用在 neural network 的訓練中?
    • Gradient descent 目的是找出一個 function 的最低點。Neural network 訓練等同尋找 loss function 的最低點,因此適合用 gradient descent 來優化。
  • 在 neural network 裡,我們具體要找出什麼的 gradient?
    • Loss 對 network 中所有 parameter 的 gradient。
  • 利用 chain rule 計算 gradient 有什麼好處?
    • 簡化式子,且將步驟分開來有利於實作中寫 modularized function。
  • 為什麼 parameter 要由後往前 update(為什麼是 backpropagation)?
    • 前面 parameter 的 gradient 使用 chain rule 後有一部分就是後面 parameter 的 gradient,可以直接使用不需重複計算。
  • Learing rate 的大小會怎麼影響訓練?
    • 太大在做 gradient descent 時可能會錯失最低點,太小會學很慢。

Day 5

  • 為什麼要將 training 和 testing 的 data 分開?
    • Testing data 可以檢驗 model 在 training data 上訓練的結果能否用於沒看過的 data。
  • 為什麼需要 validation set?和 test set 差別為何?
    • Validation 在訓練中使用,用以找出一個 model 的最佳設定。但不同 model 間的比較須由 test set 檢驗。
  • Overfitting 和 underfitting 是什麼意思?怎麼從訓練結果判讀?
    • Overfitting 代表 model 過度迎合 training data,以至於訓練出來的 model 用在沒見過的 data 上會失準。Underfitting 代表 model 學習能力不夠,無法擬合複雜的 function。判讀方法為比較 training 和 testing 的表現,如果 training 明顯比 testing 好很多且 training loss 近乎 0 即為 overfitting,如果兩邊都表現不佳即為 underfitting。
  • Regularization 是為了解決什麼問題?
    • Overfitting。
  • Normalization 有什麼好處?
    • 減低 input 不同分佈帶來的不穩定性,有助於增加訓練效率。

Day 6

  • 將 parameters 初始成常數會有什麼問題?解決辦法為何?
    • 初始值相同,則 activation 後的值和 gradient 也相同,等同都在學習同一件事。解決辦法為隨機或根據某個分佈初始化。
  • Batch、mini-batch、SGD 有何優劣?
    • Batch 一次訓練在大量 data,gradient 走勢穩定,但每次計算很慢。SGD 一次訓練在一筆 data,gradient 不一定指向最低點,因此很不穩定,但計算很快。Mini-batch 一次訓練在少量 data,走勢大致穩定,計算也有效率。
  • Momentum 是怎麼運作的?
    • 有別於原本只在乎 gradient 的方向,momentum 考量一路以來 gradient descent 的趨勢,讓訓練更快更穩定。

Day 7

  • Static computation graph 和 dynamic computation graph 有什麼差異和優缺點?
    • Static computation graph 類似在訓練前建立 model 的計算圖,雖然方便優化和重複利用,但訓練過程中不能變動架構,不易於 debug 和接受不同形狀的 input。Dynamic computation graph 則是訓練過程中再建立架構,較為彈性且容易 debug,但 model 沒辦法優化不利於小型裝置上安裝。
  • TensorFlow 和 PyTorch 分別提出了什麼解法改進各自採用的 computation graph 原本帶來的缺陷?
    • TensorFlow 加入 eager execution mode 可以選擇 dynamic computation graph。PyTorch 則是提出 TorchScript 將 code 轉成另一種 static 形式以利優化。

Day 8

  • 定義 x = torch.tensor([[1, 2, 3], [4, 5, 6]])。那麼 x.sum(dim=0) 結果為何?x.transpose(0, 1) 結果為何?
    • 結果分別為 tensor([5, 7, 9])tensor([[1, 4], [2, 5], [3, 6]])
  • Computation graph 是什麼?建立他主要是方便進行哪一步驟?
    • Computation graph 是 network 中各個 tensor 的計算關係圖。建立好關係圖,就知道 gradient 要怎麼計算。
  • 把 dropout 用 Module 形式建立的好處為何?
    • Dropout 會在 training 時斬斷一部分 node connection,但 evaluation 不需要。用 module 建立,這部分能藉由調整 model 的訓練模式自動應對。
  • 使用 optimizer 做 training 時的基本步驟為何?各自有什麼含義?
    • optimizer.zero_grad() 清除先前累積 gradient、model(input) 取得 feed-forward 預測、計算 loss、loss.backward backpropagation 計算每個 parameter 的 gradient、optimizer.step() 進行 parameter update。
  • 建立自己的 network 需要做哪些步驟?
    • 繼承 Module class、__init__() 中定義 model 架構、forward() 中定義 feed forward 步驟。
  • Module section 的範例中,輸出的 y 形狀為何?
    • (5,)。進入 fc1 後為 (30,),進入 fc2 後為 (5,)

Day 9

  • 用 log-softmax + nll loss 而非 softmax + cross entropy loss 的好處為何?
    • 一是 log 值範圍較大,數值較穩定;二是 log-softmax 運算能夠優化。
  • Training 時每個 batch 要做哪些步驟?
    • Clear gradient、feed data forward、取 loss、back propagation 算 gradient、最後 update parameter。
  • 在 training 和 testing 轉換時,要先把 model 調成正確模式。怎麼調?為什麼需要調整模式?
    • model.train()model.eval()。Training 和 evaluation 有些地方 behavior 不同,例如 dropout,設成正確模式可以自動調整這些。
  • 在 test 裡的 with torch.no_grad() 功能和用意為何?
    • 忽略 gradient 計算,加快速度。
  • 如果今天不用 conv layer,把 model 改簡單一點 input -> fully-connected layer + ReLU -> output,且 fully-connected layer size 為 256,需要怎麼改?
    • class Net(nn.Module):
          def __init__(self):
              super(Net, self).__init__()
              self.fc1 = nn.Linear(28 * 28, 256) # input 是圖片 flatten 後的大小
              self.fc2 = nn.Linear(256, 10)
      
          def forward(self, x):
              batch_size = x.shape[0]
      
              x = x.view(batch_size, -1) # flatten
              x = self.fc1(x)
              x = F.relu(x)
              x = self.fc2(x)
              output = F.log_softmax(x, dim=1)
              return output
      

Day 10

  • 好的 word vector 會呈現出哪兩種特性?
    • 相似的字會聚集在一起、vector 的方向對應相對關係。
  • 用 Skip-Gram 方法訓練 Word2Vec,是在做什麼樣的預測?
    • 根據一個字,預測周圍會出現的字。
  • 請從訓練目標的角度思考。你能推測出 Word2Vec 訓練好後,準確來說什麼樣的字會聚集在一起嗎?Hint:用 視覺化網站 找出 good 的相似字。第一名是誰?空間中最接近的字真的在文意上最相似嗎?
    • 文字中有相同 context 的字會聚集在一起。並不一定是意思文意最相似的字,例如 good 最接近的字是 bad,文意完全相反,但出現時周遭的字差不多。
  • 我們查字典知道 bank 至少有銀行跟河岸這兩種意思。但如果用 視覺化網站 找出 bank 的相似字,會發現都是跟金融相關的意思,而沒有河岸的相似字。你覺得主因為何?
    • Training corpus 中 bank 出現時的文意大部分是銀行的意思,以至於訓練出來的文意較為偏頗。
  • 能不能找出一組 analogy,顯示出文字中隱含的 bias(偏見)?
    • man : worker = woman : ? 結果大量偏向 nurse。這代表 training corpus 中大多把 woman 和 nurse、man 和 worker 相連,而 model 也學習到了這層隱含的 bias。

Day 11

  • 使用 text input 時,為什麼固定 window size 不好?
    • 預測時沒辦法利用到 window 以外文字的資訊。如果想放大 window size,input layer 也會很大,network 中需要的 parameter 會太多。
  • RNN 主要應用在哪種 data?
    • 時間相關序列。
  • RNN 的 parameter 會隨著序列變長而多嗎?對或不對的原因為何?
    • 不會。RNN 每次 input 一個 timestep,例如一個字,接著把 hidden layer 的 output 和下一個 timestep 的 input 一起 encode,如此循環。RNN input 所需要的 parameter 和一個字的 embedding 大小有關,而不是一串字的大小。
  • Vanishing gradient 是什麼?有什麼變形 vanishing gradient 的方法?
    • 當序列太長,前面的 timestep 要接收遙遠以後的 loss 傳回來的 gradient,中間的值可能會越乘越小,最後接近消失。LSTM 和 GRU unit 中設計許多控制資訊保存和流失的 gate,其中的計算方式能避免中間流動的 gradient 太靠近 0。
  • Bidirectional RNN 是希望比 uni-directional RNN 多捕捉什麼訊息?
    • 除了從前往後的資訊,多捕捉了由後往前的資訊,增加預測時的 context。

Day 12

  • Seq2Seq 大致架構為何?
    • 分成 encoder 將 input 照 timestep 一步步 encode,接著 output 整個 input sentence 的 embedding 給 decoder,同樣按照 timestep 一步步 decode。
  • 在 Seq2Seq 中,把 encoder 和 decoder 的 LSTM layer 分開,有什麼好處?
    • 提升學習能力,且讓 encoder / decoder 專屬一種語言,就能結合其他語言的 encoder / decoder 組成不同 pair,不用重新針對這個 pair 訓練完整 model。
  • 簡單解釋 beam search 是怎麼運作的。
    • 每次預測下個字,不挑一個最大機率的,而是 k 個最大機率的,再根據這 k 個預測下個字,繼續挑 k 個,以此類推。如此一來較能挑選到 output 整體機率最高的。
  • Multilingual NMT 是怎麼達到 zero-shot translation 的?
    • 一個語言 pair 中的兩個語言,各自從和其他語言訓練出來的 model 中擷取 encoder 和 decoder,兩者結合就能有新的 model。這個 model 沒有真的見過該語言 pair 的 data 就能進行翻譯,稱為 zero-shot translation,主要利用到 transfer learning。
  • 這篇提到 zero-shot machine translation 運用了 transfer learning。想一想前面提過的哪個訓練結果,也常用來做 transfer learning?
    • 訓練好的 word embedding 常被直接使用在 NLP network 中,也是 transfer learning 的一種。

Day 13

  • 在 Seq2Seq model 中,為什麼單單在 decoding 時用 encoder output 當 input 不夠取得好效果?
    • Input 不同部分的重要性不同,且 decoded output 每個 timestep 和 input 不同部分相對應。如果是 Seq2Seq 的 encoder output,不會有 input 不同部分個別的資訊。
  • 為什麼 attention 不只適合用在 text?
    • Attention 本身處理 output 和 input 的對應關係,不只文字包括圖片也會有。
  • 在 transformer 中拋棄 RNN 的好處是什麼?
    • 每個 timestep 的處理沒有 dependency,因此能更有效進行 parallel computation 加速訓練。
  • 少了 RNN,transformer 用了什麼方法找出序列間的互動,和什麼方法嵌入時間意義?
    • Self-attention 讓序列和自己互相找出對應關係,positional encoding 嵌入時間意義。
  • Transformer 中 attention 分為三個 input Q、K、V,分別代表甚麼含義?為什麼這樣區分?
    • Q 是你要計算誰的 attention output,(K, V) 是 Q 對誰做 attention,K 是這個對象和 Q 計算 attention score 的元素,V 是對象原始值。因為 encoder 和 decoder 做的 attention 對象不太相同,把他們區分成 Q、K、V 可以重複利用邏輯,只需調整 input 就好。
  • Attention 大致包含哪三個步驟?
    • 對每一部分的 input 計算 attention score、計算 softmax 將 score 轉成 probability、以此當作每一部分的 weight 計算 input 整體的 weighted average。
  • 什麼是 multi-head attention?為什麼這樣做?
    • 讓 input 做多次 self-attention,學習更多種互動,增加訊息量。

Day 14

  • Transformer 的哪個元素讓 contextual embedding 更自然的被訓練出來?
    • Self-attention。
  • BERT 中的兩個 pre-training task,分別是訓練哪兩種 embedding 的能力?
    • Mask LM 是訓練 token embedding,NSP 是訓練整個 input 的 embedding。
  • 主題預測、命名實體識別(NER)、中文斷詞、轉述句判斷(paraphrase detection)這四種任務,哪些適合用 [CLS] 的 embedding?哪些適合用其他 token 的 embedding?
    • [CLS] 為一句或一段文字的 embedding,適用於主題預測、轉述句判斷。Token embedding 則適用於 NER、中文斷詞這些可以當作 sequence tagging 的任務。
  • 要將 BERT 運用在自己的任務上,具體來說怎麼使用?
    • 下載訓練好的 pre-trained model,接著 fine-tune 在自己的任務上。

Day 18

  • 把 image 直接當作 fully-connected network 的 input,會有什麼問題?為什麼 CNN 可以避免這種問題?
    • Image 太大,fully-connected network 會需要太多 parameters。CNN 使用很小的 filter 掃過 input 提取局部特徵,parameter 數量為 filter 大小。
  • 假設有一層 convolutional layer 有 64 個 filter,每個 filter 大小為 7 x 7 x 3。那麼 input 一張大小為 35 x 35 x 3 的圖片,output 大小為何?假設沒有 padding,stride 為 1。
    • (35 - 7 + 1) x (35 - 7 + 1) x 64 = 29 x 29 x 64。
  • 承上題,不計 bias,這一層有多少 parameters?
    • 7 x 7 x 3 x 64 = 9408。
  • 假設有一層 max pooling layer,每個 filter 大小為 5 x 5。那麼 input 一張大小為 35 x 35 x 3 的圖片,output 大小為何?假設沒有 padding,stride 為 5。
    • 7 x 7 x 3。
  • 承上題,不計 bias,這一層有多少 parameters?
    • 0,pooling layer 不含 parameter。
  • network structure 圖為 Day 9 做 MNIST 示範的 CNN 架構。圖中標示的大小為 output 大小。請找出 Conv 有多少 filter 以及 filter 的合理設定。同樣的請找出 MaxPool filter 的合理設定。
    • 這邊大小為 batch size x channel x width x height。第一層 Conv 有 32 個 filter(下一層的 channel 數量),長寬從 28 降到 26 的話,每個 filter 可以是 1 x 3 x 3 做 stride = 1,padding = 0 的 convolution。MaxPool filter 讓 input 長寬減半,可以是 2 x 2 的大小,做 stride = 2 的 pooling。

Day 19

  • 思考一下在 visual question answering(給圖和問題,預測答案)中,你會怎麼設計一個 RNN + CNN + attention 的架構?Attention 的 visualization 大概會長怎樣?
    • 一個簡易的架構可以用 RNN encode 問題、CNN encode 圖片,兩者的 encoding 接到 fully-connected layer 輸出整個 input 的 encoding,再接到 RNN decoder 輸出答案。Decoder 會和 input 圖片和文字做 attention。Attention visualization 大概顯示答案和哪部分的圖對應。
  • 思考一下如果想透過中文字本身的結構訓練 word embedding,你會怎麼設計一個 RNN + CNN + attention 的架構?Attention 的 visualization 大概會長怎樣?
    • 一個簡易的架構可以用 CNN 擷取中文字體圖的特徵,輸出作為 visual word embedding,接著串到 RNN 為主的 language model 訓練 language word embedding。Attention 可以用在 language word embedding 和中文字體圖上,顯示中文字哪個部分跟文字的意義最相關。
  • 思考一下在 VisualBERT 中的 masked language modeling task,如果想要在預測 masked token 的時候根據圖片的資訊來預測,可以怎麼修改架構?
    • 可以將圖像也當作輸入,預測時就能根據文字和圖片預測。

Day 20

  • Generative model 和一般 supervised learning 任務,在目標上有什麼根本差異,讓 generative model 的訓練特別困難?
    • Generative model 的輸出並不只一種而可以是很多種答案,沒有標準答案這件事讓他不太能用 supervised learning 來訓練。
  • GAN 和前面介紹的 PixelRNN 和 VAE,在目標上有什麼不同?
    • PixelRNN 和 VAE 這些 model 都試圖直接從原始 data 的分佈開刀,明確找出 density function,生成時利用這個 function 做 sampling。GAN 則是學習如何將 random noise 轉換到原始 data 的分佈裡,並不明確使用 density function。
  • GAN 中為什麼需要額外訓練一個 discriminator?
    • 因為生成結果本身沒有適合判斷好壞的方法(除了人類),所以需要訓練一個 discriminator 來學習判斷好壞,generator 才能訓練。
  • Discriminator input 和 output 是什麼?訓練目標為何?
    • Input 是真或假 data,output 是為真實度打分數,訓練目標是能正確分辨真假 data。
  • Generator input 和 output 是什麼?訓練目標為何?
    • Input 是 random noise,output 是生成結果,訓練目標是讓結果生動到 discriminator 誤以為是真實 data。
  • 為什麼訓練步驟中要先讓 discriminator 訓練?
    • 通常 discriminator 訓練好,才能為 generator 提供好的回饋,而 discriminator 本身是 supervised learning,較容易先有訓練成果。
  • 當 D 的 output 大致為什麼值的時候,我們會說 discriminator 已經沒有辨別能力了?
    • 0.5。

Day 21

  • Neural style transfer 直接把 loss 訓練在一張 image 上,會有什麼問題?Image transformation network 如何解決這個問題?
    • Neural style transfer 這樣每次轉換都需要重新訓練圖片,花費許多時間。Image transformation network 訓練一個 model,訓練好後轉換時就能直接 feed-forward 一次獲得結果。
  • 用一般的 GAN 來做 style transfer 會有什麼問題?CycleGAN 如何解決這個問題?
    • Style transfer 中 input 和 output 是成對的。GAN 中的 discriminator 不知道 input 和 output 內容上是否相關,因此另外定義一組 GAN 相互轉換檢驗,形成 CycleGAN。

Day 22

  • 簡述一下今天介紹的 object detection 從 input 到 output 的大致過程。
    • Input 圖片進 model,預測哪些範圍可能有 object 以及可能是什麼 object,往上結合不同預測範圍,輸出 bounding box 和 classification 預測結果。
  • 從 R-CNN 到 Fast R-CNN 到 Faster R-CNN,其實都是基於哪種概念來改進?
    • 重複利用 network 前面幾層的運算。
  • Mask R-CNN 是在 Faster R-CNN 之上多做了什麼?
    • 對 Faster R-CNN 輸出的 bounding box 中每個 pixel 預測是不是物體所在。

Day 24

  • Reinforcement learning 和 supervised / unsupervised learning 比,最大的差異在於從何學習。請問兩者的學習來源分別為何?
    • Supervised / unsupervised 從 data 學習,RL 從環境中的互動經驗學習。
  • 能否畫出 reinforcement learning 中 agent 和 environment 的互動過程?
    • answer
  • Discount factor https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma 用途為何?
    • 因為累積的 reward 中,我們想要更注重當下的 reward 而不是遙遠未來,因此用 https://chart.googleapis.com/chart?cht=tx&chl=%5Cgamma 來 discount 未來的 reward。
  • Policy 簡單來說是什麼?
    • 給定 state,決定下一個最佳 action 使未來總體 reward 最大。
  • Value function 和 Q-value function 主要是在計算什麼?
    • 某個 state 或 state-action pair 的未來預期總 reward。
  • Q-learning 中的 model,input 和 output 為何?Agent 會怎麼選擇下一步 action?
    • Input 是 state,output 是 https://chart.googleapis.com/chart?cht=tx&chl=%7CA%7C 個 Q(s, a)。Agent 會選最大 Q(s, a) 對應的 action a。
  • DQN 中的 neural network 主要負責做什麼?
    • Approximate Q-value function。
  • 請解釋何謂 exploitation v.s. exploration。
    • Exploitation 是想要利用現在學習到的 policy 選擇 action,因為較有可能是好的 action。Exploration 是跳脫 policy 選擇 action,這樣可能會發現沒有發現過且能帶來極大 reward 的 action。
  • 請看一下 Q-learning 的 update rule。在 DQN 中使用 target network,是為了穩定 update rule 中的哪一項?
    • https://chart.googleapis.com/chart?cht=tx&chl=Q(s_%7Bt%2B1%7D%2C%20a),下一個 timestep 的 Q-value。

Day 25

  • Q-table 在實作方面有什麼限制,讓他顯得不實際?
    • 每個 state-action pair 都要有一個位置,若 state 和 action 很多,會佔用很多空間。
  • 第一版的 DQN,為什麼沒辦法成功訓練?
    • Reward 資訊太少,每一步不論動作好壞只要還站在車上都是 +1,model 無法知道哪個動作真正對平衡有幫助。

Day 27

  • AlphaGo 中,policy network 和 value network 分別在 MCTS 中的什麼步驟中使用?為什麼他們能幫助 MCTS 減小 search space?
    • Policy network 在 selection 時幫助選擇要往哪幾個落點深入,減少 search tree 中可能的分支。Value network 在 evaluation 時幫助預測某個結果的勝算,避免需要深入往下走太多來決定 value。
  • MCTS 中,為什麼 rollout 時要使用不太準確但計算更快的 rollout policy network?
    • Rollout 會有很多步,最後結果取平均,平均之後個別結果的不精準較不影響整體結果。因此整體來說使用 rollout policy network 更快且不會不精準。

上一篇
Day 29 / DL x RL / RL 總結與發展
系列文
Knock Knock! Deep Learning31

尚未有邦友留言

立即登入留言