laxiflora的小天地

前進軟體工程師的練功之路

0%

在前面的攻擊,是假設我們知道模型的weights,這類攻擊稱為White box attack

白箱攻擊非常簡單,盡量不要暴露parameters

下面課程前半部以圖片辨識為例介紹

Black box attack

1. Proxy network

a. 原理

我們雖然不知道想攻擊的模型的參數,但我們可以透過用同樣一批訓練資料,練出一個自己的網路。當我們能透過白箱攻擊讓Proxy network出現漏洞,則我們也有可能可以用同樣的方式讓想攻擊的network淪陷

b. 若無訓練資料

如果沒有訓練資料,也可以透過自己準備一批資料,餵給想攻擊的模型,讓他吐出一堆輸出,把輸入與輸出綁成成對資料,再拿去訓練自己的proxy network

上圖是用不同網路去攻擊各網路的accuracy,對角線因為是為白箱攻擊,所以不計入(能破proxy必能破attacked)

c. Advanced technique: Ensemble attack

  • 透過使用Ensemble model有效提高攻擊的強度


上圖縱列是指拿掉甚麼network,橫列則是被攻擊的network,如「-ResNet-152」那列就是結合除了ResNet-152以外的4個network所訓練出來的proxy network對各網路的攻擊結果;其中非對角線部分因為已在proxy network被訓練過,均視為白箱攻擊,不計入(0%)

為何黑箱攻擊如此容易成功?

  • 至今仍然還沒有確定性的答案
  • 多數人相信是因為模型之間存在著相似性,如下圖

圖片為一個高維向量,圖片的值是為原點,圖片的橫軸為可以讓攻擊成功的維度變化量,縱軸則為其他維度的偏移量。

可以發現,能在VGG-16攻擊成功的維度偏移方向,與其餘4種network均很相近。也就是說,能找到在VGG-16攻擊成功的圖片偏移方向與大小,在其他network上均大同小異。

  • 論文來源

  • 目前有一群人認為:或許Adversarial attack會成功,不是因為模型的問題,而是資料本身的特徵真的就是長那樣 $\rightarrow$ 或許資料量更大就能避免

One pixel attack

只動圖片裡的1 pixel就達成攻擊目的

Universal Adversarial Attack

  • 針對一個network的全方位攻擊方式

針對不同的圖片輸入,客製化出一個攻擊方式

Adversarial reprogramming

有點像殭屍寄生,讓原本的model輸出非他原本訓練想要的結果
upload successful

Backdoor in model

  • 在訓練階段就展開攻擊
  • 來源論文
  • 在訓練資料就放入attacked image,讓模型練完以後看似正常,卻只對單一類型圖片會出現問題,如同後門

$rightarrow$ 若這樣的技術成熟,公開資料集將會變得不安全


其他領域的攻擊應用

1. Speech processing

  • Detect synthesized speech:抓出合成的聲音訊號

攻擊者刻意在合成音裡面加入雜訊,讓機器以為那是原聲

2. NLP

文字輸入,進行機器QA

刻意在文字中加入雜訊,讓機器搞錯重點

3. 人臉辨識:真實世界攻擊

  • 既然能在虛擬世界中對圖片加工造成機器判別錯誤,當然也有可能在現實世界中對人臉加裝配件對機器造成攻擊

來源論文

  • 現實世界需要考慮諸多因素
    • 攝影角度 $\rightarrow$ universal attack(?
         - 解析度問題
         - 眼鏡印製的色差問題

除此以外,也有針對交通號誌的攻擊,讓自駕車變得困難


Defence

  • 防禦分為兩種
    • 主動防禦
    • 被動防禦

1. 被動防禦

  • network不動,在圖片丟入之前放一個Filter,來隔絕雜訊

  • 一種簡單的做法是刻意把圖片模糊化,讓原本可以讓攻擊成功的維度偏移量改變

    • 但同時也會降低原始正常圖片的辨識度

a. 更多作法

  • 圖片壓縮(刻意失真)

  • 讓Generator重新把input image重新畫一遍

    • 是有方法讓Generator產生一樣東西的,但因為generator沒看過雜訊,會產生不出來
         - 相關文獻
  • 被動防禦(模糊化)也可以視為在network前面加入一層,所以一旦被知道以後,防禦力將會大減 $\rightarrow$ 隨機化

b. Randomization

  • 把圖片隨機resize,padded一些背景之後再丟入network

upload successful

  • 相關文獻

  • 仍然有可能被攻破,抓出所有可能以後用universal attack

2. 主動防禦

a. Adversarial training

  • 在訓練階段就讓模型被攻擊

  • 把原始圖片做成attacked image後標上正確label以後再丟入model

  • 某種程度上就是data augmentation (有洞就補洞)

    • 就算不會被攻擊,也會有人用這樣的方式來強化model(降低overfitting可能性)
  • 訓練過程需要大量訓練資源,且如果碰到沒補過洞的attack algorithm,依然會被攻破

  • 有方法是不需額外計算的情況下做到adversarial training

光是正確率高還不夠,若想要讓model放在真實世界運用,還要能防止針對模型的惡意攻擊

  • 本課一樣是舉圖形分類問題為例

How to attack

我們將原本正常的圖片(Benign image)vector都加上一些小小的值,做成Attacked image,則雖然肉眼看不出來,對機器來說卻很容易造成誤判
上圖是雜訊被過度加大的結果,正常是什麼都看不出來的

如何找出攻擊的參數

雜訊並非亂加就好,需要解出一個optimization問題
假設原始圖片benign image是$x^0$,則輸出$y^0 = f(x^0)$是一個分布

現在我們想要找到attacked image $\ x^*$,使得他

  1. 與原始$y^0$所屬的類別$\hat{y}$差距越大越好
  2. 與想被誤判的目標類別$y^{target}$越小越好
  3. 與原始圖片$x^0$的差距越小越好(才不會被抓到偷改)

則我們會需要解出一個最佳化圖片$x^*$使
$$
x^* = arg\ min_{d(x^0,x)\leq \epsilon}\ L(x) \\\
L(x) = -e(y,\hat{y}) + e(y,y^{target})
$$
其中e表示cross entropy,L表示loss function,$\epsilon$表示與原圖差距的極限值

原圖與攻擊圖的差距計算

  • 方便計算,這裡均假設他們是一個vector,則原圖與修改圖之間的差距就是他們的向量相減。

    • 問題是,如何定義這樣的差值的距離?
  • 可以用L2-norm或L-infinity等等算法算距離
    差值計算方法與L2、L-infinity的公式

要用哪種norm好呢?
舉例,給定一個圖片,進行兩種修改:
右上角的圖片4個色塊都小量更改; 右下圖片只修改一個色塊但修改較多

則如果套用L2-norm,則兩種改法的距離差一樣,但是如果套用L-infinity,右下的距離會大幅大於右上

為了要瞞過人眼,應該是要讓每張圖的pixel都不會看起來變異過多,故此時應該採用L-infinity更符合實際需求。


Attack approach

要求出$x^*$的步驟

  1. 首先,init parameters,可以直接從$x^0$開始
  2. For t=1 to T,做gradient descend,同訓練模型,此時暫時不考慮上面提到的constraints
    $$
    x^t \leftarrow x^{t-w}-\eta g
    $$

g的算法

  1. 套回剛剛的限制:確認$x^*$與$x^0$差距小於$\epsilon$
    $$
    if\ d(x^0,x^t)> \epsilon: \\\
    \ \ \ x^t \leftarrow fix(x^t)
    $$

現今有很多種的attack method,但精神都不脫離現在的範例,不同的地方主要是

  • optimization的方法
  • Constraints的設計不同

Fast Gradient Sign Method(FGSM)

  • 相關論文

  • 只更新一次參數

  • g裡面的元素只可能是+1,-1

    • 一樣做偏微分,但如果結果為正,輸出1,反之輸出-1
  • 根據$\epsilon$的不同,$x^1 = x^0 - \epsilon g$

  • 這麼做可以確保修正後的圖片可以達到限制的$\epsilon$極值的一個角落

  • 可以嘗試多跑幾個iteration,但這樣有可能就不小心出界了,還需要套用剛剛的constraint,把出界的x拉回來

Global explanation

  • 「What does a cat(specific class) look like」
  • 本課程以convolution network做圖片分類為例,講述各種global explainable approach

觀察各Convolution layer中,filter關注什麼pattern

  • 假設給定一張特定圖片,則我們每次捲積,都會出現一個feature map

    • 觀察這個feature map,如果有某個filter裡面的值偏大,可以判定這張圖有某些pattern是由該filter分析
  • 不過現在我們不會知道要輸入什麼圖片,要怎麼知道該filter是注意在什麼pattern呢? $\rightarrow$ 製造一張圖片X*

  • 我們把X做為要學習的參數,作為模型的輸入,目標是要maximize該input在經過convolution以後,對應的filter的feature map的各元素值,算式如下
    $$
    X^* = arg\ max_{X}\sum_i{\sum_j{a_{ij}}}
    $$
    其中,使右式最大的自訂圖片X稱為X* (gradient ascent)


以數字辨識為例,這是每個filter想觀察的重點,可以發現有些filter著重注意橫線,有些filter在意協直線等等,看起來非常合理

透過classifier output觀察

  • 找出一種輸入X,讓第i類別類別$y_i$的分數越高越好

    • 這種做法無用,只會看到一堆雜訊
  • 一種做法是,再加入一個分類器R,用於判定$X^*$到底有多像一個數字

$$
X^* = arg\ max_{X}\ y_i+R(X) \\\
R(X)=-\sum_{i,j}|X_{ij}|
$$

這種作法很多需要regularization terms(Constraint)、hyperparameter tuning,並不簡單
範例論文

Constraint from generator

  • train 一個image generator,輸入z以後輸出一個圖片,再把這個圖片丟入image classifier,找出能讓$y_i$最大的值$z^*$

    $$
    z^* = arg\ max_{z}\ y_i+R(X) \\\
    R(X)=-\sum_{i,j}|X_{ij}|
    $$

範例論文

找出z以後,則我們可以透過Generator來告訴大家,我們所產生的這些圖片會讓電腦容易辨認成這個class

電腦真實想法或許不重要,但希望有辦法可以讓解讀出來的東西可以說服人類

透過仿作一個類似成效的簡易model來解釋

問題是,簡易的模型如何能模仿neural network的決策?
$\rightarrow$ 只模仿一部分區域的行為

Correct answers != Intelligent

Why we need explainable ML

  1. 對現實決策的解釋性
  • 如果銀行利用機器學習來做是否貸款的判斷,則法律規定機器學習必須給出拒絕/同意貸款的理由

  • 醫療、法律、自駕車、金融等等領域,不滿足於機器學習的黑箱

  1. 可以更好的去調整Model

Interpretable v.s Powerful

Linear model能力差,但是他容易解釋

Deep networks雖然強大,卻無法被解釋

與其侷限只用linear model,不如學著讓深度模型可以被解釋

  • How about decision tree?
    • Decision tree can be terrible
         - 通常會用的都是random forest,而非單一一棵decision tree

Goal of Explainable ML

  • 判准不好定義,以下是老師個人界定

人腦也是黑盒子,但我們卻可以相信人的決斷
相關心理學實驗:印表機

很多時候人們只是想要一個可以說服他們的理由,所以所謂的Explainable ML其實就是模型的決斷可以給出一個說服老闆、客戶、你自己的一種理由

Explainable ML的兩大類

問在甚麼情況下會這樣分類 (“你覺得貓看起來像如何”)

  • Local explanation
  • Global explanation

Local explanation

根據一個圖片(data)來問問題 (“為何圖片是一隻貓”)

  • 要找出一個data的哪個component對於機器的分類至關重要
    • 一種做法是:遮蓋資料的不同部分,看是否會影響機器的預測結果

另一種作法:Saliency map

針對各維的weight,加上$\Delta x$,看這樣損失函數值e的變化量為何 (|$\frac{\Delta e}{\Delta x}$|)

(其實就是|$\frac{\partial e}{\partial x_n}$|)

以圖片為例,可以得出下圖結果,此圖稱為saliency map(像素越白表示重要性越高)

但是Saliency也有限制,會碰到的問題與解決方式如下:

  1. Noisy Gradient:資料的判別依據混入了雜訊 -> SmoothGrad
  2. Gradient Saturation:可能一張圖片的特徵已經足以明顯,再對這個明顯的特徵做偏微分以後,e的變化性依然不大,則可能會誤判這個特徵點不重要 -> 有替代的做法稱為「Integrated gradient(IG)」,相關文獻:https://arxiv.org/abs/1611.02639
    ex: 大象鼻子長度作為判別是否為大象

SmoothGrad

這個技術就是把原始的圖片輸入隨機加入一些雜訊並分別計算他們的Saliency map再取平均,真正重要的部位就會被凸顯出來


機器如何處理輸入

前面主要都在說機器如何找出一個輸入的重要部分

現在要探討的則是機器如何去處理這個輸入的

Visualization:具現化用肉眼觀察

- 直接去看neuron、attention的輸出是甚麼。雖然輸出的維度很高,但是可以透過一些方法(PCA、t-SNE等等)壓縮成二維並顯示出來

以作業2為例解釋

透過觀察被壓縮後的結果,我們可以看出一些特性


比如範例中的model某層輸出,可以看出機器可以看的出不同人所說的同樣內容,並把他們align在一起

關於attention可否被解釋,有諸多論戰

Probing:用探針插入network來觀察發生甚麼事

訓練一個classifier,將embedding丟進去,讓classifier試圖去訓練是否可以分類出想要的資訊

注意,probing仍會失誤,不可太快下定論(ex. 分類模型練壞等等)

  • 一種probing應用的範例:
    用作業二(語者辨識)的範例,可以把特定layer的輸出embedding丟入TTS模型,讓TTS模型想辦法還原原始的輸入。

若TTS無法完整的還原某塊部分(如.語者資訊),則可以知道這個network有學到抹去語者的資訊,只保留語音內容。

另一個probing例子

  • 是李老師的論文

upload successful
 - 論文連結

Feature Disentanglement

Feature Disentanglement 應用

假如我們能知道embedding各維所代表的意涵,我們能用它做寫甚麼?

Voice Conversion

  • ex.柯南的領結變聲器

  • 如果要A人聲轉成B人聲,一般需要A,B都念一樣的句子

  • 透過feature disentanglement技術,可以讓A,B不必一定要說一樣的話

    • 我們知道哪些維度代表說話者的特徵,則我們可以只擷取這段維度,丟入decoder

   

Discrete Latent Representation

  • embedding的各維可以不一定是real numbers,它可以是binary,甚至是one-hot

  • 把embedding做這樣的格式可以更容易做feature disentanglement

Example:VQVAE

會準備一個code book,將embedding跟這裏面的vectors計算相似度,取出相似度最高的那個vector,丟入decoder,範例如下圖

這樣的過程其實有點像self-attention。encoder的輸出類比於self-attention裡面的query,而code book的vectors則像是key

  • 這樣表示decoder的輸入可能性只有codebook裡面的向量數量,讓輸出變成離散的

Text as Representation

  • Representation = embedding
  • 有沒有可能讓embedding不要是向量,而是人們看得懂的文字呢?


範例:https://arxiv.org/abs/1810.02851

  • 在這個範例下,輸入跟輸出都是seq,所以model會需要是一個seq2seq的類型

    • 這也是一種transformer
  • 這類做法也稱為seq2seq2seq auto-encoder (中間也是文字)

embedding的可讀性

  • 若我們要取的任務是取得文章摘要,有沒有可能輸出的embedding其實就是summary呢?
    • 行不通。實務上encoder跟decoder之間會發明一個暗號,人類看不懂embedding的輸出,但是decoder卻能正常還原

    • 一種解決方法就是套用GAN的概念,加入discriminator,讓embedding跟真人寫得summary做比較,而embedding則必須騙過discriminator


沒錯 看起來又很像cycle GAN了
encoder、decoder就是generator,上面的則是discriminator

Tree as representation

本課不細講,相關參考如下

More Applications

VAE

  • 若把decoder單獨拆出來,也可以看作是一個generator

  • decoder經過一段修正,就是variational auto-encoder (VAE)

Compression

  • auto-encoder也可以看作是一種壓縮,把一個圖片丟入encoder,並且儲存embedding
    • decoder的還原動作則是”decompression”,不過這樣還原出來的圖片會有失真

Anomaly Detection (異常檢測)

本次作業內容

給定一個資料集{$x^1,x^2,…,x^N$},並且判斷輸入x與資料集是否相似

異常檢測的相關應用:

  • 信用卡交易詐欺檢測 (交易行為是否異常)

  • 網路侵入偵測 (連線行為是否異常)

  • 癌症偵測 (細胞是否變異)

  • 那異常檢測是否就是一種二元分類問題呢?

    • 這種問題的難點就是在蒐集資料,異常資料不易蒐集
    • 這類問題假設我們只有正常的訓練資料(其中一種class),而沒有異常訓練資料,稱為”One class分類問題”
  • 解決One class classification問題,就會需要auto-encoder

    • 正常資料由於有學習過,所以可以有效還原
         - 但如果出現了異常資料,decoder會難以還原,若發現decoder的輸出與原始輸入相似度低(large reconstruction loss),則可以判斷它就是anomaly的資料

auto-encoder只是anomaly detection的一種approach,更多的異常檢測任務解法可以參考其它年的課程

  • 也不用label data就可以做pretrain -> 算是一種self-supervised learning

  • 出現在2006年,是很老的模型

Auto-encoder 模型


Auto-encoder也有encoder、decoder的兩層network,輸入會是一張unlabeled的圖片,經過encoder以後變成向量,再透過decoder變回一張圖片

  • 訓練的目標是希望decoder輸出的圖與原圖越像越好(距離越近越好)

    • 又稱為reconstruction
  • 很像Cycle GAN中,2個generator之間的關係

  • 關於中間的vector,有很多別稱

    • Embedding, Representation, Code
  • auto-encoder的encoder通常輸入是為度很高的向量,而中介的vector則是維度低很多的向量,故可用於壓縮

    • 具備壓縮的功能
         - encoder的輸出也叫做bottleneck
         - 這樣降維的技術稱為「dimention reduction」

Why auto-encoder

  • 為何有辦法讓低維度向量變成一個圖片呢?
    • 圖片的變化有限,把變化的可能性記下來,就可以把一個複雜的圖片用簡單的方式記錄下來

變形:De-noising auto-encode

  • 也不是多新的技術(2008)

  • 把輸入的圖片先隨便加入一些雜訊,但是要decoder還原加入雜訊之前的結果

    • auto-encoder必須自己學會把雜訊去除
  • 這個idea其實跟現今的BERT很像(填空)

  • BERT又可看作一個de-noising auto-encoder
    • BERT的decoder不一定是linear。 廣義來看,可以把BERT切開,比如一個BERT前6層是encoder,後6層+linear layer是decoder

Task introduction

  • GAN:project some random variables into specific space
  • 必須實作:DCGAN、WGAN、WGAN-GP
  • 產生1000張動漫人臉
    • <number>.jpg

Dataset

  • 從Crypko爬下來的
  • 71,314張pictures
    faces
    |
    |_0.jpg
    |_1.jpg
    |

Evaluation metrics

  1. FID score
  2. AFD rate,表示多少張圖片能被辯認為動漫頭像

Baseline


Simple:SAMPLE CODE(DCGAN) , train 1 hr
Medium:DCGAN with more epochs , train 11.5 hr
Strong:WGAN / WGAN-GP , train 2
3 hr
Boss:StyleGAN , train < 5 hr

Report Question

  1. 列出WGAN跟GAN的兩大差異
  2. 畫出WGAN跟WGAN-GP的gradient norm結果

Reference

WGAN & WGAN-GP

Style-GAN

link


  • 本次作業使用judgeboi

  • translate english to chinese

作業講解

datasets

  • (en,zh-tw) paired data

Evaluation

  • BLEU score
  • 本次會需要對training data做一些preprocessing(norm,刪除極端資料)

技巧

  • label smoothing
  • tokenize
  • lr scheduling (warm-up , 遞減lr)
  • back translation (中英,英中都train)
    • 不同語言的data需要保持在同一個維度
         - backward model的表現很重要
         - model capacity will increase,since data amount increased

Baselines

Simple: Train RNN seq2seq (Sample code)
Medium: add lr scheduler, train longer
Strong: 使用transformer, tuning hyperparameter
Boss: Apply back-translation

Note: 助教的ppt有建議hyperparameter

Report

  • 問題一:要visualize positional embedding,用一個2維matrix表示 (cosine similarity)
    • 可以從decoder得到,使用pos_emb = model.decoder.embed_positions.weights.cpu().detech()
        - torch.size([1026,256]) (256維)
         - 推薦使用cosine similarity
  • 問題二:實作Clipping Gradient norm 並顯示出gradient norm
    • 避免梯度爆炸
    • Gradient norm: 把每個參數的gradient收集起來變成vector,對他們計算p-norm
    • 作法:
            1. 設定一個最大值max_norm
            2. 收集paras,並計算他們的p-norm,命結果為Lnorm
            3. 如果Lnorm > max_norm,則計算scale_factor = max_norm / Lnorm,並對每個gradient乘上scale_factor
      • 設定max_norm = 1.0
      • Apply plot of “gradient norm v.s step”,並圈出Lnorm > max_norm的地方
    • 助教的code已經有算出gnorm了,我們要把它儲存起來,才能在training結束的時候具現化它

寫作業歷程

這份作業無法繳交了,因為judgeboi已經關起來了qq,只能直接在本機用test data去驗證BLEU分數

觀察Sample Code

首先,來研究一下助教的code,整個notebook分為幾大片段:

  1. 下載資料集以及import packages

    • 資料集來自fairseq
  2. 對資料集內容做前處理(clean_corpus)

    • 移除一些垃圾字元
      • 移除特殊符號
      • 如果是中文,把全形轉換成半形
    • 移除過長或過短的字詞
      • min = 1
      • max = 1000
    • 輸出train_dev.clean.zh/en
  3. 切割valid/training set

    • 1:99
    • 輸出 train.clean.zh/en , valid.clean.zh/en 4檔案
  4. 處理OOV問題

至此資料處理完成

  1. 模型定義

    • fairseq?
    • 預設RNN的encoder,decoder
    • 大模型class由seq2seq包裝

    實際instance長這樣:

1
2
3
4
5
6
7
8
9
# HINT: TODO: switch to TransformerEncoder & TransformerDecoder
encoder = RNNEncoder(args, src_dict, encoder_embed_tokens)
decoder = RNNDecoder(args, tgt_dict, decoder_embed_tokens)
# encoder = TransformerEncoder(args, src_dict, encoder_embed_tokens)
# decoder = TransformerDecoder(args, tgt_dict, decoder_embed_tokens)

# sequence to sequence model
model = Seq2Seq(args, encoder, decoder)

所以要做的就是自己做一如下面的TransformerEncoder/Decoder,取代原本的RNN
助教強調對於seq2seq任務來說,init非常重要,下方的初始化會需要做出相對應的調整

  1. Optimizer & learning rate schaduling

    • lr這塊需要套公式,公式有給

    至此模型初始化完成

  2. Traing step

    • 這裡沒什麼要注意的了
    • 觀察一下要如何完成report

First Approach

直接run sample code,觀察運作方式
BLEU score = 16.08

1
2
3
2022-08-04 07:04:07 | INFO | hw5.seq2seq | BLEU = 16.08 43.4/21.3/11.4/6.3 (BP = 1.000 ratio = 1.009 hyp_len = 112803 ref_len = 111811)
2022-08-04 07:04:07 | INFO | hw5.seq2seq | saved epoch checkpoint: /content/checkpoints/rnn/checkpoint15.pt
2022-08-04 07:04:07 | INFO | hw5.seq2seq | end of epoch 15

Second Approach

  • 把encoder, decoder註解拿掉,由RNN改成Transformer

hyperparameter修正


其中:

  • $P_{drop}$ = Residual Drop
  • $d_{ff/v/k/model}$ = dimension of fast-forward/key/value/model
  • N = layer數
  • $\epsilon_{ls}$ = label smoothing rate

我照著Base版修改hp

  • encoder/decoder_embed_dim = 512
  • encoder/decoder_ffn_embed_dim = 2048
  • encoder/decoder_layers = 6
  • args.encoder/decoder_attention_head = 8 (太高也不好)

修改learning rate 公式

lr = pow(d_model,-0.5)*min( pow(step_num,-0.5), step_num* pow(warmup_step,-1.5) )

Result

1
2
3
2022-08-04 16:04:59 | INFO | hw5.seq2seq | BLEU = 25.50 59.7/34.3/20.6/13.0 (BP = 0.937 ratio = 0.939 hyp_len = 105012 ref_len = 111811)
2022-08-04 16:05:00 | INFO | hw5.seq2seq | saved epoch checkpoint: /content/checkpoints/rnn/checkpoint15.pt
2022-08-04 16:05:00 | INFO | hw5.seq2seq | end of epoch 15

有達到strong base line了,不過還沒做報告

Third Approach

之前沒有為完成report寫一些額外的code,這次把他補上了

Prob1:visualize positional embedding

參考了這篇網誌中的Report 1,自己做雖然有成功detach,但並不知道後續該怎麼做…對於CosineSimilarity與tensor dimention的掌握度不足..完全沒想到要用unsqueeze

Prob2:實作Clipping Gradient norm 並顯示出gradient norm

其實clipping gradient norm助教已經寫好了,我做的只是把每個step的gnorm存到一個list gnormList裡面,然後再把它丟進圖表裡面印出來

Mount google drive

有鑑於上次的大暴死,這次決定把epoch的cache保存在自己的雲端硬碟而非放在colab裡面
不然連線階段一個過期,整個檔案會被刪除,就算有save model都沒救…

Result

BLEU score = 25.63

1
2
3
4
5
2022-08-05 13:10:14 | INFO | hw5.seq2seq | example source: so we're hoping that's what they'll do .
2022-08-05 13:10:14 | INFO | hw5.seq2seq | example hypothesis: 我們希望他們能做到這點 。
2022-08-05 13:10:14 | INFO | hw5.seq2seq | example reference: 所以 , 我們希望它們能夠幫忙 。
2022-08-05 13:10:14 | INFO | hw5.seq2seq | validation loss: 3.2599
2022-08-05 13:10:14 | INFO | hw5.seq2seq | BLEU = 25.63 57.9/32.9/19.6/12.3 (BP = 0.986 ratio = 0.986 hyp_len = 110246 ref_len = 111811)

Report

Prolem 1

Problem 2


Reference

梯度爆炸

梯度爆炸:在error surface平坦的地方,設的lr過大,導致整個參數大跑

OOV (out of vacabulary)

  • 類似人類會的英語字彙不足,不足以表達意涵
  • 字彙過長,不好處理
  • 本作業中使用subwords來解決這個問題,Reference

Google雲端

本次作業的模型參數檔、gnorm軌跡與預測結果連結

GPT的任務

GPT模型demo

給定一個seq,要能預測出下一個出現的token是甚麼
ex. ground truth是台灣大學,則給定\\<BOS>、台,就要能預測灣

有點像transformer的decoder,只知道之前的內容。

  • 因為GPT具備predict next token的能力,所以也可以用來做GAN

  • GPT的形象是獨角獸

How to use GPT

  • GPT也可以跟BERT用一樣的做法,拿出來用以後直接接一個簡單的classifier

  • 原文論文不是這樣用(可能是fine-tune都有問題)

  • 原文的訓練方式有點類似學測的模擬題目

    給定樣本題與正確答案,希望他能做出類似的答案,也就是要能看懂題目要幹嘛,並給出答案

  • 從翻譯當例子,就是告訴它「Translate english to Chinese」(task description)後,再給幾個範例

    • cheese -> 起司 (examples)
         - sea -> 海洋

     
    並叫它繼續填空

    • plush -> ___ (prompt)
  • 這樣的做法類似「few-shot learning」,但沒有用到gradient descent

    • few-shot,表示給定的樣本數很少
    • 原文作者給它命名為「in-context learning」
  • 這種學法很有野心,但目前命中率不高(40~50%,175B parameters)

相關細節

Beyond Text

除了剛剛的翻譯例子以外,GPT還有很多用途

在語音、CV等等領域也有所應用,留待深入研究

  • BERT也可以做語音版的,語音也可以填空與預測
    • 老師有帶領實驗室合作,開發相關的資料庫任務組:superb (語音版的GLUE)