在很長一段時間裡,大家都對深度學習模型有所誤解,認為模型需要非常大量的資料訓練,且只能過訓練過的模式起作用——用貓的資料訓練就只能識別貓,只有在訓練資料中多次出現的模式才能被模型學習和應用,稍有變化,模型就無法正常工作。
實際上隨著深度學習模型的發展,這些問題都在逐步改善。現在很多模型學習的不僅是解決具體的問題,比如識別圖中的貓或者狗,還可以通過訓練學習資料間的關係,在更抽象的層面學習,從而實現了舉一反三。另外,隨著遷移學習的流行,將海量資料中學到的知識用於只包括少量資料的新場景之中也變成了一種趨勢。
本篇介紹幾種比較巧妙的方法解決訓練集中未出現過的問題。
one-shot問題
one-shot learning 指需要識別的物體在訓練樣本中很少出現,甚至在只出現一次的情況下,也能訓練模型。zero-shot與之類似,即使樣本在訓練資料中完全沒出現過,也能正確識別或分類。
搜尋是乙個one-shot問題,比如網購平台上有很多衣服,不可能每一件都放入模型訓練,搜尋的目標是找到與之同款的一種或多種同款商品。同一款衣服自然有很多類似特徵,比如顏色,質地,樣式等等,但是使用深度網路學習出來的知識散落在網路的各個引數之中,無法確定各個輸出的具體性質,並且中還包括不同背景,角度,以及人穿還是平鋪等多種因素。
風格遷移
風格遷移可以實現用一張的風格與另一張內容結合,生成新的功能,而非機械拼接。具體方法是先用預訓練的視覺模型提取各個層次的特徵,將某些層的目標結果設定為內容,某些層的目標結果設定為風格,反向調整內容。
其中提取風格的部分非常巧妙,模型計算每個通道輸出資料之間的關係。比如風格某兩個通道的輸出有同增同減的關係,就調節目標,使它在該層也有類似的輸出。
在風格遷移的任務中,被調整的不是網路引數,而是輸入網路的資料,這種方法也常用於在對抗攻擊中生成對模型更有攻擊性的資料(梯度攻擊)。
模擬推理
模擬推理是詞向量的一種應用,首先利用大量自然語言資料訓練詞向量,使得每一詞可使用n個屬性描述,然後通過屬性之間的運算實現推理,如:國王-王后=男-女,因此有:王后=國王-女+男。使用詞向量還可以計算詞間的距離。
通過遷移學習,讓仍用少量資料訓練的模型有更強的能力,比如:***與yyy在預訓練的詞向量模型提取的特徵非常類似,yyy在訓練集**現過,而***只在測試集**現,通過詞向量的遷移,使***與yyy學到的知識結合。
這種方法也常用於解決zero-shot問題,比如訓練資料中沒有老虎,但是通過與它近似的動物,以及用模型學到的各個特徵之間的關係,識別出中的老虎。
替換空格 舉一反三
思路 在替換空格時,從後向前開始進行搬移,因為把乙個字元替換為了3個字元,所以陣列的長度會變長,替換後陣列的長度 空格的數量 2 替換之前陣列的長度,要注意記憶體覆蓋。給兩個標記,tailoldlength標記原陣列 替換之前的陣列 的最後乙個元素,tailnewlength標記新陣列 替換之後的陣...
php上傳思路很重要 舉一反三
1 form標籤enctype屬性 表單中enctype multipart form data 的意思,是設定表單的mime編碼。預設情況,只有使用了multipart form data,才能完整的傳遞檔案資料 input標籤 type 屬性中的 file 2 files 系統函式 files ...
舉一反三 最長連續子串問題
給定一串行,如,求其連續子串行的和能被k整除的子串行的最長長度.注 連續子串行,即在序列中連續訪問的數.序列,其滿足條件的序列為,故滿足條件的最長子串行為,長度為5.思路1 滑動視窗的思想,遍歷全部子串行.如下 解法1 遍歷所有的子串行,滑動視窗的思想 private static int find...