0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí)上演“皇帝的新衣”如何剖析CoordConv?

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-20 09:18 ? 次閱讀

前幾天,論智曾報(bào)道了這么一個(gè)項(xiàng)目:Uber提出CoordConv:解決了普通CNN的坐標(biāo)變換問(wèn)題。文中講到,Uber AI工程師們發(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)無(wú)法將空間表示轉(zhuǎn)換成笛卡爾空間中的坐標(biāo)和獨(dú)熱像素空間中的坐標(biāo)。更重要的是,他們還對(duì)這一限制提出了解決方法,即CoordConv。

論文一經(jīng)推出,就收獲了不少點(diǎn)贊,連我們的編譯版本閱讀量也很可觀,小編甚是欣慰。可是沒(méi)過(guò)幾天,一位名叫Filip Piekniewski的朋友在他的個(gè)人博客上寫道:“這種微不足道的進(jìn)步也值得這樣贊美……”這位計(jì)算機(jī)視覺(jué)工程師用52行代碼就做出了和論文同樣的結(jié)果,讓我們看看他是如何剖析CoordConv的吧。以下是論智的編譯。

簡(jiǎn)介

關(guān)于深度學(xué)習(xí)的論文,我讀的很多,經(jīng)常一個(gè)星期讀好幾篇的樣子,所以目前為止可能讀了幾千份論文。機(jī)器學(xué)習(xí)或深度學(xué)習(xí)有一個(gè)基本的問(wèn)題,即這些論文總是處在科學(xué)和工程之間的“無(wú)人之境”上,我將它成為“學(xué)術(shù)工程(academic engineering)”,具體解釋如下:

我個(gè)人認(rèn)為,一篇科學(xué)論文應(yīng)該傳遞一種觀點(diǎn),使其有能力解釋某種東西。例如一篇證明一個(gè)數(shù)學(xué)定理的論文或者表示某些物理現(xiàn)象的模型。另外,科學(xué)論文應(yīng)該以實(shí)驗(yàn)為基礎(chǔ),實(shí)驗(yàn)的結(jié)果能告訴我們有關(guān)顯示的基本情況。雖然如此,科學(xué)論文的中心仍是對(duì)自然事實(shí)的普遍性和觀察進(jìn)行總結(jié)。

一篇工程類論文應(yīng)該展示解決某一特殊問(wèn)題的方法。在不同的應(yīng)用上,問(wèn)題的類型也不相同,有時(shí)可能很無(wú)聊,但是對(duì)某些人是很有價(jià)值的。對(duì)一篇工程論文來(lái)說(shuō),重點(diǎn)和科學(xué)論文有所不同:解決方案的普遍性也許不是最重要的,重要的是這一方案能夠?qū)嶋H運(yùn)用。也就是說(shuō),給定可用條件,該解決方案比之前的方法更便宜、更高效。所以說(shuō)工程類論文的重點(diǎn)是應(yīng)用,其余的部分都是用于支撐該方法能解決問(wèn)題的觀點(diǎn)。

而機(jī)器學(xué)習(xí)介于兩者之間,這一領(lǐng)域既有科學(xué)類論文(例如介紹反向傳播的那篇),也有明顯的工程類論文,其中描述了很實(shí)用的解決方法。但是大部分論文都更偏向工程一點(diǎn),為了顯示優(yōu)越性,其中取消了特別的技巧,經(jīng)過(guò)一些不重要的數(shù)據(jù)測(cè)試之后就宣布這種方法的成功。

除此之外還有第四種論文,它們的確包含某種觀點(diǎn),這種想法可能是有用的,但卻是不值一提的。為了掩蓋這令人尷尬的事實(shí),作者們美名其曰這是“學(xué)術(shù)工程”,從而讓論文看上去“高大上”了許多。

好巧不巧,Uber最近就發(fā)表了這樣一篇論文——An Intriguing Failing of Convolutional Neural Networks and CoordConv Solution,下面我就要好好剖(shou)析(si)這一成果。

解剖開始

讓我們直接進(jìn)入正題

現(xiàn)在我們知道,這篇論文的中心是,研究者發(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)在需要坐標(biāo)的任務(wù)中表現(xiàn)得不是很好,詳細(xì)地說(shuō),即輸出標(biāo)簽或多或少的是輸入元素坐標(biāo)的正函數(shù),并不表示輸入的其他屬性。

卷積網(wǎng)絡(luò)確實(shí)在此類問(wèn)題上表現(xiàn)的不好,因?yàn)樘卣饔成涞慕Y(jié)構(gòu),從福島邦彥提出新認(rèn)知機(jī)(Neocognitron)后,在設(shè)計(jì)時(shí)就忽略了這些坐標(biāo)的位置。所以Uber AI的作者提出了一種解決方法:在卷積層中加入坐標(biāo),將其當(dāng)做額外的輸入映射。

聽起來(lái)這個(gè)方法很好,但是作者實(shí)際上提出的方法,也是很多從業(yè)者經(jīng)常會(huì)想當(dāng)然的方法——他們添加的特征更適合對(duì)想要的輸出進(jìn)行解碼。任何從事計(jì)算機(jī)視覺(jué)的專家都不會(huì)對(duì)加入特征感到陌生,雖然這只是深度學(xué)習(xí)圈子里一個(gè)小話題?,F(xiàn)如今,深度學(xué)習(xí)中的研究者們已然脫離了實(shí)際應(yīng)用,聲稱我們應(yīng)該只使用學(xué)到的特征,因?yàn)椤斑@種方法更好”。這么說(shuō)深度學(xué)習(xí)圈里的人們也開始認(rèn)同特征工程了啊……

訓(xùn)練

不管怎樣,這篇論文加入了一個(gè)特征,明確表示出了坐標(biāo)的值。接著作者在一個(gè)名為“Not-so-Clevr”的數(shù)據(jù)集上進(jìn)行測(cè)試(這個(gè)數(shù)據(jù)集的名字很皮),那么他們的試驗(yàn)是不是真的聰明呢?讓我們進(jìn)一步分析。

其中一個(gè)任務(wù)是基于坐標(biāo)生成獨(dú)熱圖像,或者從獨(dú)熱圖像中生成坐標(biāo)。他們表示在卷積網(wǎng)絡(luò)中加入坐標(biāo)的確可以大大提高性能。

等等,冷靜一下,如果他們不直接上手TensorFlow,而是直接創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)解決獨(dú)熱編碼到坐標(biāo)的變換問(wèn)題的話……就不用任何訓(xùn)練啊。對(duì)于這個(gè)問(wèn)題我會(huì)進(jìn)行三種操作:卷積、非線性激勵(lì)和求和。好在這些都是卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)組成部分:

import scipy.signal as sp

import numpy as np

# Fix some image dimensions

I_width = 100

I_height = 70

# Generate input image

A=np.zeros((I_height,I_width))

# Generate random test position

pos_x = np.random.randint(0, I_width-1)

pos_y = np.random.randint(0, I_height-1)

# Put a pixel in a random test position

A[pos_y, pos_x]=1

# Create what will be the coordinate features

X=np.zeros_like(A)

Y=np.zeros_like(A)

# Fill the X-coordinate value

for x in range(I_width):

X[:,x] = x

# Fill the Y-coordinate value

for y in range(I_height):

Y[y,:] = y

# Define the convolutional operators

op1 = np.array([[0, 0, 0],

[0, -1, 0],

[0, 0, 0]])

opx = np.array([[0, 0, 0],

[0, I_width, 0],

[0, 0, 0]])

opy = np.array([[0, 0, 0],

[0, I_height, 0],

[0, 0, 0]])

# Convolve to get the first feature map DY

CA0 = sp.convolve2d(A, opy, mode='same')

CY0 = sp.convolve2d(Y, op1, mode='same')

DY=CA0+CY0

# Convolve to get the second feature map DX

CA1 = sp.convolve2d(A, opx, mode='same')

CX0 = sp.convolve2d(X, op1, mode='same')

DX=CA1+CX0

# Apply half rectifying nonlinearity

DX[np.where(DX<0)]=0

DY[np.where(DY<0)]=0

# Subtract from a constant (extra layer with a bias unit)

result_y=I_height-DY.sum()

result_x=I_width-DX.sum()

# Check the result

assert(pos_x == int(result_x))

assert(pos_y == int(result_y))

print result_x

print result_y

一個(gè)熱點(diǎn)位圖進(jìn)行坐標(biāo)轉(zhuǎn)換、一個(gè)卷積層、一個(gè)非線性激勵(lì)、一個(gè)求和以及最后從一個(gè)減法,無(wú)需學(xué)習(xí),50多行Python代碼,搞定。

接下來(lái)讓我們?cè)囋囋贕AN上進(jìn)行合成生成任務(wù),其中一個(gè)還有坐標(biāo)特征,另一個(gè)沒(méi)有。在論文的附錄中有這么一個(gè)表格:

他們嘗試在ImageNet上將坐標(biāo)特征添加到ResNet-50網(wǎng)絡(luò)的第一個(gè)圖層上。我猜作者希望在這里看到較大的提升,因?yàn)镮mageNet的類別讀數(shù)并不是位置的函數(shù)(如果這里存在偏差,那么訓(xùn)練時(shí)的數(shù)據(jù)增強(qiáng)過(guò)程就應(yīng)該完全清除)。

所以他們用100個(gè)GPU進(jìn)行了測(cè)試(100個(gè)啊?。?,但是直到小數(shù)點(diǎn)后第三位,結(jié)果才有些許提升。100個(gè)GPU就提高了這么一點(diǎn)兒,要不然讓谷歌或者Facebook的人用10000個(gè)GPU試試,說(shuō)不定能在小數(shù)點(diǎn)后第二位就看到變化了呢(逃)。

總結(jié)

這篇論文的確吸引人,它在當(dāng)下“一切向計(jì)算力看齊”的大背景下還能揭露深度學(xué)習(xí)的缺陷實(shí)屬不易。但為什么是Uber提出這個(gè)問(wèn)題?如果是一些學(xué)生做出這樣的成績(jī)也就罷了,但是Uber AI不是搞自動(dòng)駕駛的嗎?

更有意思的是這篇論文在推特上受到很多人,甚至深度學(xué)習(xí)專家的表?yè)P(yáng)。他們太過(guò)于看重GPU的表現(xiàn)力了,殊不知這明明只需要幾行Python就能解決……

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:Uber成果CoordConv被diss,深度學(xué)習(xí)上演“皇帝的新衣”

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《C語(yǔ)言深度剖析》【超經(jīng)典書籍】

    本帖最后由 zgzzlt 于 2012-8-16 14:23 編輯 《C語(yǔ)言深度剖析》【超經(jīng)典書籍】
    發(fā)表于 08-02 08:59

    C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析——一本關(guān)于C語(yǔ)言學(xué)習(xí)的教程,里面包含C語(yǔ)言編寫規(guī)范,各種變量指針用法等。以含金量勇敢挑戰(zhàn)國(guó)內(nèi)外同類書籍
    發(fā)表于 08-14 11:36

    c語(yǔ)言深度剖析

    c語(yǔ)言深度剖析
    發(fā)表于 04-02 09:12

    陳正沖《C語(yǔ)言深度剖析

    陳正沖編寫的《C語(yǔ)言深度剖析》,挺經(jīng)典,剛來(lái)論壇,多多指教~~
    發(fā)表于 08-17 12:06

    linux內(nèi)核深度剖析,另附有光盤資料

    linux內(nèi)核深度剖析,對(duì)于想學(xué)linux內(nèi)核的人來(lái)說(shuō),絕對(duì)值得一看,另附有光盤資料。
    發(fā)表于 01-15 21:25

    【資料分享】C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析
    發(fā)表于 10-16 15:16

    學(xué)習(xí)上位機(jī)的福音,傻瓜式項(xiàng)目教程。

    本帖最后由 qq84395064 于 2017-2-15 18:54 編輯 學(xué)習(xí)上位機(jī)的編程的福音。簡(jiǎn)單的上位機(jī)教程。希望大家多交流,多學(xué)習(xí)。
    發(fā)表于 02-05 18:48

    C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析
    發(fā)表于 08-25 09:08

    C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析[完整版].pdfC語(yǔ)言深度剖析[完整版].pdf (919.58 KB )
    發(fā)表于 03-19 05:11

    C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析。
    發(fā)表于 05-05 17:40 ?7次下載

    C語(yǔ)言深度剖析

    C語(yǔ)言深度剖析
    發(fā)表于 12-20 22:50 ?0次下載

    剖析AI芯片市場(chǎng):為什么要加強(qiáng)深度學(xué)習(xí)

    目前,整個(gè)AI芯片市場(chǎng)都圍繞著深度學(xué)習(xí)而展開。深度學(xué)習(xí)(DL),則正是讓AI應(yīng)用程序在現(xiàn)實(shí)世界中真正發(fā)揮作用的最成功的機(jī)器學(xué)習(xí)技術(shù)范例。
    的頭像 發(fā)表于 08-13 10:46 ?2273次閱讀
    <b class='flag-5'>剖析</b>AI芯片市場(chǎng):為什么要加強(qiáng)<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>

    剖析深度學(xué)習(xí)與傳統(tǒng)計(jì)算機(jī)視覺(jué)之間的關(guān)系

    ,甚至是該領(lǐng)域接受過(guò)培訓(xùn)的科學(xué)家,都不知道它們究竟是如何運(yùn)作的。 大量有關(guān)深度學(xué)習(xí)的成功或失敗事例給我們上了寶貴的一課,教會(huì)我們正確處理數(shù)據(jù)。在這篇文章中,我們將深入剖析深度
    的頭像 發(fā)表于 04-22 10:45 ?2537次閱讀

    學(xué)習(xí)上位機(jī)編程還是PLC編程

    當(dāng)我們們談到學(xué)習(xí)自動(dòng)化編程時(shí),可能會(huì)面臨一個(gè)選擇:學(xué)習(xí)上位機(jī)編程還是PLC編程?針對(duì)這個(gè)問(wèn)題,我想說(shuō),這兩種編程方式之間沒(méi)有直接的聯(lián)系。PLC編程是基于梯形圖的編 程方式,而上位機(jī)編程則是基于代碼
    發(fā)表于 05-09 14:23 ?4次下載
    先<b class='flag-5'>學(xué)習(xí)上</b>位機(jī)編程還是PLC編程

    C語(yǔ)言深度剖析.zip

    C語(yǔ)言深度剖析
    發(fā)表于 12-30 09:20 ?5次下載