6-机器学习启蒙- 深度学习: 图像搜索
6- 深度學習: 圖像搜索
github: https://github.com/mtianyan/graphLabStartedML
深度學習: 圖像搜索
基于圖片的相似度來選購商品
可視化商品推薦
我想買雙新鞋,但是。。。
mark符合我的風格,我又感興趣的鞋子真不容易
文本搜素不能幫助我們
mark搜素時裝鞋,只能找到一雙我們覺得有意思的。而我想找的是真正有個性不同的鞋子
可我又不知道用什么關鍵字搜索,用圖像的特征找到相似的鞋子
神經網絡
特征是機器學習的關鍵
在做機器學習時我們一般會有輸入值,比如情感分析中的評價語句
mark目標;重新檢視分類器,但是應用更復雜的非線性特征
圖像分類
我們的目標是從一個圖像出發。
mark輸入圖像的像素,輸出預測的對象值。
分出狗狗的品種。
特征指的是我們的數據的表現形式,我們把他們當做輸入送入分類器。
數據有很多種表現形式:
- 比如文字,就可以用詞袋模型和tf-idf的形式。
- 對于圖片也有很多其他的表現形式。
神經網絡: 學習"非常" 非線性的特征
線性分類器
線性分類器區分開正類和負類
mark分類器的圖表示: 用于定義神經網絡
mark對于每一個特征變量我們都有一個與之對應的特征節點,直到第d個特征變量。
對于我們要預測的輸出值y我們也有一個節點來對應。
將特征節點與權重相乘然后累加得到分數。
分值大于零時我們輸入1,分值小于0時我們輸出0
小型線性分類器,小型神經網絡或單層神經網絡。
線性分類器可以表示什么?
mark mark邏輯的或運算可以用線性分類器來表示。
定義一個打分函數,在后三行的情況下輸出正值,值大于0即可。
- 第一行時值小于0
權重為 -0.5 1 1 時滿足條件。
與運算,只有x1 和x2 都等于1的時候才能大于0
單層神經網絡來表示邏輯與運算和或運算。
線性分類器不能表示什么?
mark在這個函數中沒有哪條線能將加號,減號分割開。
mark異或運算: 任何事情的反例
我們之前講過的線性特征就不夠用了,我們需要一些非線性的特征
解決XOR問題: 添加一層
markXOR結果為1的情況是x1為真,x2為假 或 x1為假,x2為真時
mark添加兩個單元。z1,z2
我們要做的是建立一個神經網絡:
- 不能直接輸入x1,x2預測y,但是它能預測中間值z1,z2
- 然后我們再通過中間值來預測y
與運算:
z1:節點1的權重-0.5, x1權重1,因為是not x2權重-1
z2: 節點1權重-0.5, x1權重-1,x2權重1
此時當x1 x2全為真時: x1*1為1 x2*1為-1加起來為0,而我們需要的值是此時小于0.所以常數項-0.5
其他情況略。
神經網絡
對數據進行多層次的變換。
有多層的線性和非線性變換
mark神經網絡已經被發明接近50年了
- 在90年代進入低谷
大約十年前,最近幾年有了大的復興
- 在一些典型問題的準確率大大提升
- 大量的數據集,(計算能力)gpu和新的建模學習算法使它如虎添翼
深度學習在計算機視覺中的應用
圖像特征
特征 = 局部探測器
- 組合在一起構成預測
- 現實中,特征都是很底層的
鼻子探測器,眼睛探測器,嘴巴探測器。
如果每個探測器都探測成功,就可以通過這個小型神經網絡做出預測這是個人臉。
典型的局部探測器尋找圖像中的局部興趣點
圖像特征: 局部興趣點的組合
- 組合在一起構成分類器
角落探測器
有很多手工構造的特征被用于尋找興趣點
SIFT特征
mark典型圖像分類方法
mark根據sift特征被激活的地方構成向量。這些特征在有些地方激活,有些地方不激活
這跟尋找一篇文章的單詞是類似的。
圖像特定的地方有沒有特定的角,然后就可以把這些信息輸入到分類器
線性識別分類器: 告訴我們是否是人臉
挑戰在于這些人工的特征很難設計
mark深度學習: 自動學習特征
mark輸入到一個三層的神經網絡
mark識別這些局部神經探測器,每一層都會發現這些特征。在不同的層次探測不同的圖像性質。
- 第一個探測器作用:
- 找到對角線的邊緣
- 中間是從另外一個方向抓取對角線邊緣
- 最后一個抓取過渡特征,從深色到綠色的變化
- 第二個探測器: 會把這些對角線邊緣綜合起來形成更復雜的探測器
發現彎彎曲曲的線,一些角
- 第三個探測器會更為復雜,識別出臉蛋
深度學習的性能
應用深度學習神經網絡的結果示例
- 德國交通信號識別問題
99.5%準確率(IDSIA團隊)
- 房屋門牌號識別(google 街景)
每個字符97.8%準確率
ImageNet2012競賽: 120萬張訓練圖像,1000種類別
對于圖片進行分類,不是識別是不是一條狗,而是這個狗是啥品種的問題
marksuperVision團隊采用了深度神經網絡,大幅度超過對手
大大提高了大家對于深度學習網絡在計算機視覺領域應用的興趣。
mark8層的神經網絡,有6000萬個參數
獲得這種驚人的結果需要:
計算機視覺中的深度學習
識別圖片中狗的品種
利用深度學習進行景物解析
mark每個像素進行分類,發現特定的區域。天空區域,草坪區域。
這類景物解析,也稱為場景理解。
神經網絡對于這種需求非常有效
檢索相似圖像
mark我們輸入一張自己中意的鞋子的圖片,輸出風格等類似的鞋子的圖片
深度學習的挑戰
使學習特征成為可能,而不是手動的去調節
卓越的性能提升:
- 計算機視覺
- 語音識別
- 一些文本分析
潛在更多的影響
深度學習工作流
mark需要大量的標注數據,包含哪種狗。(人工標注)
- 劃分訓練集和驗證集。學習深度神經網絡之后進行驗證。
驗證發現不符合,我們又需要進行修改模型。我們需要不停的迭代
很多技巧可以讓結果更好
- 不同類型的層和連接
- 可以提供高準確率
不同特征的層和很多復雜的細節。
深度學習的劣勢
為了達到高準確率,需要非常多的數據
計算特別昂貴
非常難調節模型
- 架構的選擇(層數)
- 參數類型
- 元參數
- 學習算法
昂貴的計算成本+太多的選擇 = 模型非常難以調節
深度特征: 深度學習 + 遷移學習
幫助建立神經網絡,甚至當你沒有很多數據的時候都可以建立。
標準圖片分類方法
mark我們能不能從數據中學習特征。
遷移學習: 應用一個任務的數據來幫助學習其他任務
很老的方法
mark在你擁有很多的數據的時候,訓練神經網絡。
如果我們有一個區分貓和狗的任務,我們訓練了一個八層1600個參數的復雜網絡。
最后我們得到了一個非常準確的貓狗分類器。
假如我們有了新的任務,此時我們只擁有很少量的數據。檢測椅子大象,相機等
我們使用從貓狗神經網絡中學習到的特征再加上一個簡單的分類器,來獲取一個對于101個類別上的高準確率
這就是遷移學習,我們在貓狗中學習到的特征可以被遷移到新的任務中。
神經網絡學習了什么?
mark我們更改一下學習方法。對于貓狗分類而言這個網絡非常準確。
最后的幾層: 主要用于貓和狗的分類。
就跟之前例子中最后一層進行顏色檢測
中間的層很一般化,代表角落檢測,彎彎曲曲的畫面等。
轉換學習細節
對于任務2,要預測101個類別,只需要學習神經網絡的末端
mark把最后這一塊中專門針對貓和狗的部分剔除掉。
mark保持前面各層的權重固定。
mark利用這些特征再加上一個簡單的分類器。
我們就能用很少的椅子汽車大象等圖片數據來訓練一個模型
mark注意分割點,后面的層可能太特定于任務了
應用深度特征的遷移學習流程
mark深度特征的通用性有多強?
垃圾回收
mark垃圾車挨個回收路徑優化。
深度學習總結
mark以前的回歸,分類,機器學
輸入圖像和相應的標簽,標簽是要么是一只貓,要么是一只狗,或者是一個房子。
特征提取: 采用深度特征進行特征提取。
輸出的是圖片和圖片的深度特征X
使用機器學習模型來分類這類特征。拿出我們預測的標簽y帽子和真正的標簽y。在性能度量中。
y y帽子 性能度量取決于你的任務。(我們本次的任務中使用了分類準確率)
這時的w帽子才是真正的邏輯回歸的權重參數
機器學習要做的是保證分類準確率,嘗試改變和更新w帽子來使準確率更高
我們學到了
- 描述多層神經網絡模型
- 解釋在計算機視覺中特征作為局部探測器的作用
- 神經網絡和手動構建的特征的關系
- 描述了深度學習獲得成功的一些場景
- 深度學習模型的優勢和劣勢
- 應用轉換學習的概念
- 應用一個領域訓練的神經網絡作為特征來構建另一個領域的模型
- 應用深度特征構建圖像檢索工具
深度學習實踐
見jupyter notebook
深度學習圖片檢索工具
總結
以上是生活随笔為你收集整理的6-机器学习启蒙- 深度学习: 图像搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [编程题] 迷路的牛牛
- 下一篇: LeetCode - Medium -