日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

人工智能教程007:创建一个卷积神经网络(2)

發布時間:2023/12/6 卷积神经网络 92 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人工智能教程007:创建一个卷积神经网络(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

我們如何對圖像應用卷積

當我們在圖像上應用卷積時,我們在兩個維度上執行卷積——水平和豎直方向。我們混合兩桶信息:第一桶是輸入的圖像,由三個矩陣構成——RGB三通道,其中每個元素都是0到255之間的一個整數。第二個桶是卷積核(kernel),單個浮點數矩陣。可以將卷積核的大小和模式想象成一個攪拌圖像的方法。卷積核的輸出是一幅修改后的圖像,在深度學習中經常被稱作feature map。對每個顏色通道都有一個feature map。

邊緣檢測卷積核的效果

這是怎么做到的呢,我們現在演示一下如何通過卷積來混合這兩種信息。一種方法是從輸入圖片中取出一個與卷積核大小相同的區塊——這里假設圖片為100×100100×100,卷積核大小為3×33×3,那么我們取出的區塊大小就是3×33×3——然后對每對相同位置的元素執行乘法后求和(不同于矩陣乘法,卻類似向量內積,這里是兩個相同大小的矩陣的“點乘”)。乘積的和就生成了feature map中的一個像素。當一個像素計算完畢后,移動一個像素取下一個區塊執行相同的運算。當無法再移動取得新區塊的時候對feature map的計算就結束了。這個流程可以用如下的動畫演示:

RAM是輸入圖片,Buffer是feature map

你可能注意到這里有個正規化因子m,這里m的值為kernel的大小9;這是為了保證輸入圖像和feature map的亮度相同。

為什么機器學習中圖像卷積有用

圖像中可能含有很多我們不關心的噪音。一個好例子是針對時尚圖像用深度編碼器做的搜索引擎:你上傳一幅時尚服飾的圖片,編碼器自動找出款式類似的服飾。

如果你想要區分衣服的式樣,那么衣服的顏色就不那么重要了;另外像商標之類的細節也不那么重要。最重要的可能是衣服的外形。一般來講,女裝襯衫的形狀與襯衣、夾克和褲子的外觀非常不同。如果我們過濾掉這些多余的噪音,那我們的算法就不會因顏色、商標之類的細節分心了。我們可以通過卷積輕松地實現這項處理。

我們通過索貝爾邊緣檢測濾波器(與上上一幅圖類似)去掉了圖像中除了邊緣之外的所有信息——這也是為什么卷積應用經常被稱作濾波而卷積核經常被稱作濾波器(更準確的定義在下面)的原因。由邊緣檢測濾波器生成的feature map對區分衣服類型非常有用,因為只有外形信息被保留下來。

彩圖的左上角是搜索query,其他是搜索結果,你會發現自動編碼器真的只關注衣服的外形,而不是顏色。

再進一步:有許多不同的核可以產生多種feature map,比如銳化圖像(強調細節),或者模糊圖像(減少細節),并且每個feature map都可能幫助算法做出決策(一些細節,比如衣服上有3個紐扣而不是兩個,可能可以區分一些服飾)。

使用這種手段——讀入輸入、變換輸入、然后把feature map喂給某個算法——被稱為特征工程。特征工程非常難,很少有資料幫你上手。造成的結果是,很少有人能熟練地在多個領域應用特征工程。特征工程是——純手工——也是Kaggle比賽中最重要的技能。特征工程這么難的原因是,對每種數據每種問題,有用的特征都是不同的:圖像類任務的特征可能對時序類任務不起作用;即使兩個任務都是圖像類的,也很難找出相同的有效特征,因為視待識別的物體的不同,有用的特征也不同。這非常依賴經驗。

所以特征工程對新手來講特別困難。不過對圖像而言,是否可以利用卷積核自動找出某個任務中最適合的特征?

進入卷積神經網絡

卷積神經網絡就是干這個的。不同于剛才使用固定數字的卷積核,我們賦予參數給這些核,參數將在數據上得到訓練。隨著卷積神經網絡的訓練,這些卷積核為了得到有用信息,在圖像或feature map上的過濾工作會變得越來越好。這個過程是自動的,稱作特征學習。特征學習自動適配新的任務:我們只需在新數據上訓練一下自動找出新的過濾器就行了。這是卷積神經網絡如此強大的原因——不需要繁重的特征工程了!

通常卷積神經網絡并不學習單一的核,而是同時學習多層級的多個核。比如一個32x16x16的核用到256×256的圖像上去會產生32個241×241()的feature map。所以自動地得到了32個有用的新特征。這些特征可以作為下個核的輸入。一旦學習到了多級特征,我們簡單地將它們傳給一個全連接的簡單的神經網絡,由它完成分類。這就是在概念上理解卷積神經網絡所需的全部知識了(池化也是個重要的主題,但還是在另一篇博客中講吧)。

第二部分:高級概念

我們現在對卷積有了一個良好的初步認識,也知道了卷積神經網絡在干什么、為什么它如此強大。現在讓我們深入了解一下卷積運算中到底發生了什么。我們將認識到剛才對卷積的講解是粗淺的,并且這里有更優雅的解釋。通過深入理解,我們可以理解卷積的本質并將其應用到許多不同的數據上去。萬事開頭難,第一步是理解卷積原理。

卷積定理

要理解卷積,不得不提convolution theorem,它將時域和空域上的復雜卷積對應到了頻域中的元素間簡單的乘積。這個定理非常強大,在許多科學領域中得到了廣泛應用。卷積定理也是快速傅里葉變換算法被稱為20世紀最重要的算法之一的一個原因。

第一個等式是一維連續域上兩個連續函數的卷積;第二個等式是二維離散域(圖像)上的卷積。這里指的是卷積,指的是傅里葉變換,表示傅里葉逆變換,是一個正規化常量。這里的“離散”指的是數據由有限個變量構成(像素);一維指的是數據是一維的(時間),圖像則是二維的,視頻則是三維的。

為了更好地理解卷積定理,我們還需要理解數字圖像處理中的傅里葉變換。

快速傅里葉變換

快速傅里葉變換是一種將時域和空域中的數據轉換到頻域上去的算法。傅里葉變換用一些正弦和余弦波的和來表示原函數。必須注意的是,傅里葉變換一般涉及到復數,也就是說一個實數被變換為一個具有實部和虛部的復數。通常虛部只在一部分領域有用,比如將頻域變換回到時域和空域上;而在這篇博客里會被忽略掉。你可以在下面看到一個信號(一個以時間為參數的有周期的函數通常稱為信號)是如何被傅里葉變換的:

紅色是時域,藍色為頻域

你也許會說從沒見過這些東西,但我敢肯定你在生活中是見過的:如果紅色是一首音樂的話,那么藍色值就是你在你的MP3播放器屏幕上看到的頻譜:

傅里葉域上的圖像

我們如何想象圖片的頻率呢?想象一張只有兩種模式的紙片,現在把紙片豎起來順著線條的方向看過去,就會看到一個一個的亮點。這些以一定間隔分割黑白部分的波就代表著頻率。在頻域中,低頻率更接近中央而高頻率更接近邊緣。頻域中高強度(亮度、白色)的位置代表著原始圖像亮度改變的方向。這一點在接下來這張圖與其對數傅里葉變換(對傅里葉變換的實部取對數,這樣可以減小像素亮度的差別,便于觀察更廣的亮度區域)中特別明顯:

我們馬上就可以發現傅里葉變換包含了關于物體朝向的信息。如果物體被旋轉了一個角度,從圖像像素上可能很難判斷,但從頻域上可以很明顯地看出來。

這是個很重要的啟發,基于傅里葉定理,我們知道卷積神經網絡在頻域上檢測圖像并且捕捉到了物體的方向信息。于是卷積神經網絡就比傳統算法更擅長處理旋轉后的圖像(雖然還是比不上人類)。

頻率過濾與卷積

為什么卷積經常被描述為過濾,為什么卷積核經常被稱為過濾器呢?通過下一個例子可以解釋:

如果我們對圖像執行傅里葉變換,并且乘以一個圓形(背景填充黑色,也就是0),我們可以過濾掉所有的高頻值(它們會成為0,因為填充是0)。注意過濾后的圖像依然有條紋模式,但圖像質量下降了很多——這就是jpeg壓縮算法的工作原理(雖然有些不同但用了類似的變換),我們變換圖形,然后只保留部分頻率,最后將其逆變換為二維圖片;壓縮率就是黑色背景與圓圈的比率。

我們現在將圓圈想象為一個卷積核,然后就有了完整的卷積過程——就像在卷積神經網絡中看到的那樣。要穩定快速地執行傅里葉變換還需要許多技巧,但這就是基本理念了。

現在我們已經理解了卷積定理和傅里葉變換,我們可以將這些理念應用到其他科學領域,以加強我們對深度學習中的卷積的理解。

流體力學的啟發

流體力學為空氣和水創建了大量的微分方程模型,傅里葉變換不但簡化了卷積,也簡化了微分,或者說任何利用了微分方程的領域。有時候得到解析解的唯一方法就是對微分方程左右同時執行傅里葉變換。在這個過程中,我們常常將解寫成兩個函數卷積的形式,以得到更簡單的表達。這是在一個維度上的應用,還有在兩個維度上的應用,比如天文學。

擴散

你可以混合兩種液體(牛奶和咖啡),只要施加一個外力(湯勺攪拌)——這被稱為對流,而且是個很快的過程。你也可以耐心等待兩種液體自然混合——這被稱為擴散,通常是很慢的過程。

想象一下,一個魚缸被一塊板子隔開,兩邊各有不同濃度的鹽水。抽掉板子后,兩邊的鹽水會逐步混合為同一個濃度。濃度差越大,這個過程越劇烈。

現在想象一下,一個魚缸被?256×256 個板子分割為?256×256 個部分,每個部分都有不同濃度的鹽水。如果你去掉所有的擋板,濃度類似的小塊間將不會有多少擴散,但濃度差異大的區塊間有巨大的擴散。這些小塊就是像素點,而濃度就是像素的亮度。濃度的擴散就是像素亮度的擴散。

這說明,擴散現象與卷積有相似點——初始狀態下不同濃度的液體,或不同強度的像素。為了完成下一步的解釋,我們還需要理解傳播子。

理解傳播子

傳播子就是密度函數,表示流體微粒應該往哪個方向傳播。問題是神經網絡中沒有這樣的概率函數,只有一個卷積核——我們要如何統一這兩種概念呢?

我們可以通過正規化來講卷積核轉化為概率密度函數。這有點像計算輸出值的softmax。下面就是對第一個例子中的卷積核執行的softmax結果:

現在我們就可以從擴散的角度來理解圖像上的卷積了。我們可以把卷積理解為兩個擴散流程。首先,當像素亮度改變時(黑色到白色等)會發生擴散;然后某個區域的擴散滿足卷積核對應的概率分布。這意味著卷積核正在處理的區域中的像素點必須按照這些概率來擴散。

在上面那個邊緣檢測器中,幾乎所有臨近邊緣的信息都會聚集到邊緣上(這在流體擴散中是不可能的,但這里的解釋在數學上是成立的)。比如說所有低于0.0001的像素都非常可能流動到中間并累加起來。與周圍像素區別最大的區域會成為強度的集中地,因為擴散最劇烈。反過來說,強度最集中的地方說明與周圍對比最強烈,這也就是物體的邊緣所在,這解釋了為什么這個核是一個邊緣檢測器。

所以我們就得到了物理解釋:卷積是信息的擴散。我們可以直接把這種解釋運用到其他核上去,有時候我們需要先執行一個softmax正規化才能解釋,但一般來講核中的數字已經足夠說明它想要干什么。比如說,你是否能推斷下面這個核的的意圖?

等等,有點迷惑

對一個概率化的卷積核,怎么會有確定的功能?我們必須根據核對應的概率分布也就是傳播子來計算單個粒子的擴散不是嗎?

是的,確實如此。但是,如果你取一小部分液體,比如一滴水,你仍然有幾百萬水分子。雖然單個分子的隨機移動滿足傳播子,但大量的分子宏觀上的表現是基本確定的。這是統計學上的解釋,也是流體力學的解釋。我們可以把傳播子的概率分布解釋為信息或說像素亮度的平均分布;也就是說我們的解釋從流體力學的角度來講是沒問題的。話說回來,這里還有一個卷積的隨機解釋。

量子力學的啟發

傳播子是量子力學中的重要概念。在量子力學中,一個微粒可能處于一種疊加態,此時它有兩個或兩個以上屬性使其無法確定位于觀測世界中的具體位置。比如,一個微粒可能同時存在于兩個不同的位置。

但是如果你測量微粒的狀態——比如說現在微粒在哪里——它就只能存在于一個具體位置了。換句話說,你通過觀測破壞了微粒的疊加態。傳播子就描述了微粒出現位置的概率分布。比如說在測量后一個微粒可能——根據傳播子的概率函數——30%在A,70%在B。

通過量子糾纏,幾個粒子就可以同時儲存上百或上百萬個狀態——這就是量子計算機的威力。

如果我們將這種解釋用于深度學習,我們可以把圖片想象為位于疊加態,于是在每個3*3的區塊中,每個像素同時出現在9個位置。一旦我們應用了卷積,我們就執行了一次觀測,然后每個像素就坍縮到滿足概率分布的單個位置上了,并且得到的單個像素是所有像素的平均值。為了使這種解釋成立,必須保證卷積是隨機過程。這意味著,同一個圖片同一個卷積核會產生不同的結果。這種解釋沒有顯式地把誰比作誰,但可能啟發你如何把卷積用成隨機過程,或如何發明量子計算機上的卷積網絡算法。量子算法能夠在線性時間內計算出卷積核描述的所有可能的狀態組合。

概率論的啟發

卷積與互相關緊密相連。互相關是一種衡量小段信息(幾秒鐘的音樂片段)與大段信息(整首音樂)之間相似度的一種手段(youtube使用了類似的技術檢測侵權視頻)。

雖然互相關的公式看起來很難,但通過如下手段我們可以馬上看到它與深度學習的聯系。在圖片搜索中,我們簡單地將query圖片上下顛倒作為核然后通過卷積進行互相關檢驗,結果會得到一張有一個或多個亮點的圖片,亮點所在的位置就是人臉所在的位置。

這個例子也展示了通過補零來使傅里葉變換穩定的一種技巧,許多版本的傅里葉變換都使用了這種技巧。另外還有使用了其他padding技巧:比如平鋪核,分治等等。我不會展開講,關于傅里葉變換的文獻太多了,里面的技巧特別多——特別是對圖像來講。

在更底層,卷積網絡第一層不會執行互相關校驗,因為第一層執行的是邊緣檢測。后面的層得到的都是更抽象的特征,就有可能執行互相關了。可以想象這些亮點像素會傳遞給檢測人臉的單元(Google Brain項目的網絡結構中有一些單元專門識別人臉、貓等等;也許用的是互相關?)

統計學的啟發

統計模型和機器學習模型的區別是什么?統計模型只關心很少的、可以解釋的變量。它們的目的經常是回答問題:藥品A比藥品B好嗎?

機器學習模型是專注于預測效果的:對于年齡X的人群,藥品A比B的治愈率高17%,對年齡Y則是23%。

機器學習模型通常比統計模型更擅長預測,但它們不是那么可信。統計模型更擅長得到準確可信的結果:就算藥品A比B好17%,我們也不知道這是不是偶然,我們需要統計模型來判斷。

對時序數據,有兩種重要的模型:weighted moving average 和autoregressive模型,后者可歸入ARIMA model (autoregressive integrated moving average model)。比起LSTM,ARIMA很弱。但在低維度數據(1-5維)上,ARIMA非常健壯。雖然它們有點難以解釋,但ARIMA絕不是像深度學習算法那樣的黑盒子。如果你需要一個可信的模型,這是個巨大的優勢。

我們可以將這些統計模型寫成卷積的形式,然后深度學習中的卷積就可以解釋為產生局部ARIMA特征的函數了。這兩種形式并不完全重合,使用需謹慎。

C是一個以核為參數的函數,white noise是正規化的均值為0方差為1的互不相關的數據。

當我們預處理數據的時候,經常將數據處理為類似white noise的形式:將數據移動到均值為0,將方差調整為1。我們很少去除數據的相關性,因為計算復雜度高。但是在概念上是很簡單的,我們旋轉坐標軸以重合數據的特征向量:

現在如果我們將C作為bias,我們就會覺得這與卷積神經網絡很像。所以卷積層的輸出可被解釋為白噪音數據經過autoregressive model的輸出。

weighted moving average的解釋更簡單:就是輸入數據與某個固定的核的卷積。看看文末的高斯平滑核就會明白這個解釋。高斯平滑核可以被看做每個像素與其鄰居的平均,或者說每個像素被其鄰居平均(邊緣模糊)。

雖然單個核無法同時創建autoregressive 和 weighted moving average 特征,但我們可以使用多個核來產生不同的特征。

監督學習的概念

監督學習是用正確答案已知的例子來訓練神經網絡,也就是用標記過的數據。如果我們想設計一個系統——從相冊中找出包含你的父母的照片,基本的步驟如下:

第一步:數據的生成和分類

首先,需要將你所有的照片看一遍,記錄下來哪些照片上有你的父母。然后把照片分為兩組。第一組叫做訓練集,用來訓練神經網絡。第二組叫做驗證集,用來檢驗訓練好的神經網絡能否認出你的父母,正確率有多少。

之后,這些數據會作為神經網絡的輸入,得到一些輸出。用數學語言表示就是:找到一個函數,該函數的輸入是一幅照片。當照片上有你的父母的時候,輸出為1;沒有的時候,輸出為0。

這種問題通常叫做分類。因為這個例子中,輸出只有兩個可能,是或者不是。

當然,監督學習的輸出也可以是任意值,而不僅僅是0或者1。舉另一個例子,我們的神經網絡可以預測一個人還信用卡的概率。這個概率可以是0到100的任意一個數字。這種問題通常叫做回歸。

第二步:訓練

在進行訓練這一步時,每一幅圖像都會作為神經網絡的輸入,根據一定的規則(激活函數),決定某個神經元的輸出,進而得到某一層的輸出。當計算完所有神經元的時候,最后得到了最右邊的神經元(輸出節點)的輸出,是0還是1。

上一步中,我們已對照片上是否有你父母做過標記。這樣,我們就能知道神經網絡所預測的結果是否正確,并把這一信息反饋回神經網絡。

這里所反饋的,是成本函數的計算結果,即神經網絡計算結果與實際情況的偏差。這個函數也叫做目標函數、效用函數或者適應度函數。這一結果用來調整神經元的權重和偏差,這就是BP算法,即反向傳播算法,因為該信息是從后向前傳遞的。

剛才針對的是一個照片。你需要對每張照片不斷重復這個過程。每個過程中都要最小化成本函數。

BP算法有很多實現方法,最常用還是梯度遞減的方法。

Algobeans 非常通俗易懂的解釋了這個方法。Michael Nielsen 在此基礎上,加上了積分和線性代數,也給出了形象生動的演示。

第三步:驗證

至此,第一組中的數據已經全部用完。接下來我們會用第二組數據驗證訓練得到的模型的準確率。

優化模型的許多參數(超參)需要優化,因此導致第二步和第三步通常會交叉進行。常用的超參有神經網絡有多少個神經元,有多少層神經元,哪個函數用來激活一個神經元(激活函數),用多快的速度來訓練網絡(學習速率)等等。Quora 工程師主管的這一回復很好的解釋了這些超參。

第四步:應用

完成以上三步,模型就訓練好了。接下來,我們可以把模型融合到程序中。模型可以提供一個 API,例如 ParentsInPicture(photo)。當應用程序調用該 API 的時候,模型會計算得到結果,并返回給應用程序。

稍后,我們將用同樣的方法步驟,在 iPhone 上制作一個 APP,用來識別名片。

對數據集進行標記的成本是非常高的。因此,必須確保使用網絡得到的收益比標記數據和訓練模型的消耗要更高。

舉例來說,在醫學領域,根據X光照片標記病人是否患有癌癥成本是很高的,但能以極高的準確率來診斷病人是否患癌的系統則又非常有價值。

無監督學習

無監督學習 中使用的數據是沒有標記過的,即不知道輸入數據對應的輸出結果是什么。無監督學習只能默默的讀取數據,自己尋找數據的模型和規律,比如聚類(把相似數據歸為一組)和異常檢測(尋找異常)。

  • 假設你要生產T恤,卻不知道 XS、S、M、L 和 XL 的尺寸到底應該設計多大。你可以根據人們的體測數據,用聚類算法把人們分到不同的組,從而決定尺碼的大小。

  • 假如你是初創的安全相關公司的 CTO。你想從網絡連接情況找到一些蛛絲馬跡:突然增大的數據流量可能意味著有快要離職的員工下載所有的 CRM 歷史數據,或者有人往新開賬戶里面轉了一大筆錢。如果你對這類事情感興趣,可以參考無監督異常檢測算法概覽:

▍半監督學習

半監督學習訓練中使用的數據,只有一小部分是標記過的,而大部分是沒有標記的。因此和監督學習相比,半監督學習的成本較低,但是又能達到較高的準確度。舉例來說,我們在 AI 咨詢公司 Joostware 工作的朋友 Delip Rao,用半監督學習方法對每類只標記30個數據,和用監督學習對每個類標記1360個數據,取得了一樣的效果。并且這使得他們的客戶可以標記更多的類,從20個類迅速擴展到了110個類。

一個直觀的解釋為什么無標記也能提高準確率:即使不知道正確的答案,但是可以知道輸入數據長什么樣,有什么可能的取值。

喜歡數學的可以讀讀朱曉進教授長達135頁的教程和他2008年那篇半監督學習縱覽。

半監督學習教程

http://pages.cs.wisc.edu/~jerryzhu/pub/sslicml07.pdf

半監督學習縱覽

http://pages.cs.wisc.edu/~jerryzhu/pub/ssl_survey.pdf

強化學習

強化學習也是使用未標記的數據,但是可以通過某種方法知道你是離正確答案越來越近還是越來越遠(即獎懲函數)。傳統的“冷熱游戲”(hotter or colder,是美版捉迷藏游戲 Huckle Buckle Beanstalk 的一個變種)很生動的解釋了這個概念。你的朋友會事先藏好一個東西,當你離這個東西越來越近的時候,你朋友就說熱,越來越遠的時候,你朋友會說冷。冷或者熱就是一個獎懲函數。半監督學習算法就是最大化獎懲函數。可以把獎懲函數想象成正確答案的一個延遲的、稀疏的形式。

在監督學習中,能直接得到每個輸入的對應的輸出。強化學習中,訓練一段時間后,你才能得到一個延遲的反饋,并且只有一點提示說明你是離答案越來越遠還是越來越近。

?

轉載于:https://my.oschina.net/weidongpei/blog/1815288

總結

以上是生活随笔為你收集整理的人工智能教程007:创建一个卷积神经网络(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。