最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(1)——新煉丹爐

2022-12-03 15:05 作者:花師小哲-中二  | 我要投稿


算是緊急加更,因?yàn)橛幸患容^重磅的消息:pytorch推出2.0了?。m然穩(wěn)定版還要等段時(shí)間)。作為經(jīng)歷過(guò)煉丹爐多年變化的煉金術(shù)師,正好趁著這個(gè)機(jī)會(huì)談一下。

也不打草稿了,就直接想到什么就說(shuō)什么吧,算是雜談。

關(guān)于神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史我就不多說(shuō)了,具體可以參考之前的相關(guān)專欄:

【花師小哲】面向一般大眾的神經(jīng)網(wǎng)絡(luò)科普(1)-基礎(chǔ)知識(shí)

大家只需要記住,神經(jīng)網(wǎng)絡(luò)其實(shí)是最早是好幾十年前的技術(shù)了,只是12年左右重新被挖掘了出來(lái),然后就迅速成為人工智能的主流方法,也使得人工智能能夠再次流行。

我最開始了解神經(jīng)網(wǎng)絡(luò),或者說(shuō)進(jìn)行神經(jīng)網(wǎng)絡(luò)編程其實(shí)是在課堂上,參考當(dāng)時(shí)課程的小組展示:

【花師小哲】老二次元當(dāng)初是如何學(xué)神經(jīng)網(wǎng)絡(luò)的

其實(shí)一開始,大家寫神經(jīng)網(wǎng)絡(luò)都是手?jǐn)]的,很正常嘛,看到什么新算法不自己寫一寫怎么行。當(dāng)時(shí)我剛?cè)腙?duì)海韻機(jī)器人隊(duì)(雖然也提到很多次了,和舊RCS合并之前我是在海韻機(jī)器人隊(duì)的),視覺沒人做,然后隊(duì)長(zhǎng)就挖來(lái)了一個(gè)學(xué)長(zhǎng),當(dāng)時(shí)聽說(shuō)學(xué)長(zhǎng)是手?jǐn)]過(guò)神經(jīng)網(wǎng)絡(luò)(好像是用C++擼過(guò)的),就覺得非常厲害。

第2年,我們上了神經(jīng)網(wǎng)絡(luò)課,老師教我們神經(jīng)網(wǎng)絡(luò)的基本原理,教我們用matlab寫神經(jīng)網(wǎng)絡(luò)。當(dāng)時(shí)好像已經(jīng)有些matlab的神經(jīng)網(wǎng)絡(luò)包了(matlab包也是無(wú)奇不有),不過(guò)還是手?jǐn)]的。用matlab的一個(gè)好處是寫矩陣運(yùn)算非常方便(可能不煉金的朋友不是很清楚,看起來(lái)長(zhǎng)成那樣的神經(jīng)網(wǎng)絡(luò)在實(shí)現(xiàn)的時(shí)候其實(shí)就是大量的矩陣運(yùn)算),不過(guò)手?jǐn)]的難度其實(shí)并沒有顯著地減少(畢竟你用C++寫無(wú)非是多從網(wǎng)上找些矩陣運(yùn)算的庫(kù)或函數(shù)嘛),只是省去了一些矩陣函數(shù)的編寫。

我當(dāng)時(shí)寫的網(wǎng)絡(luò)是比老師的作業(yè)要求要高的(有的小組只寫了全連接網(wǎng)絡(luò)),寫了三通道兩層卷積兩層池化(其中三通道如何實(shí)現(xiàn),兩層卷積如何實(shí)現(xiàn)反向傳播都是上課沒有教的),還挺有滿足感的。(其實(shí)雖然說(shuō)是小組任務(wù),但神經(jīng)網(wǎng)絡(luò)都是我一個(gè)人寫的,其他人基本上是寫寫預(yù)處理、損失函數(shù)之類的,有一位同學(xué)在我的指導(dǎo)下寫了全連接網(wǎng)絡(luò),不過(guò)有些問題,我又重新寫了一遍)(哎,大學(xué)組隊(duì)就是這樣)。

那么,問題來(lái)了,神經(jīng)網(wǎng)絡(luò)的編程難在哪里呢?答案是反向傳播。

看下面這個(gè)網(wǎng)絡(luò):

正常來(lái)講,我們的輸入是從輸入端到輸出端的,這稱為正向傳播。我們想用一個(gè)訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行計(jì)算就只需要完成正向傳播就可以了。

但是,對(duì)于沒有經(jīng)過(guò)訓(xùn)練的網(wǎng)絡(luò),我們是需要根據(jù)我們的訓(xùn)練樣本去修改神經(jīng)網(wǎng)絡(luò)權(quán)值的,而完成這個(gè)步驟就需要反向傳播。

簡(jiǎn)單來(lái)說(shuō),神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程是:先正向傳播(從輸入到輸出)->獲得結(jié)果后計(jì)算損失->讓損失反向傳播,從輸出層傳遞到輸入層,在此期間修改每個(gè)(或者說(shuō)需要修改的)權(quán)值。

具體怎么傳播就是神經(jīng)網(wǎng)絡(luò)編程最困難的點(diǎn),簡(jiǎn)單來(lái)說(shuō)這里需要大量的導(dǎo)數(shù)運(yùn)算,當(dāng)時(shí)和學(xué)長(zhǎng)交流手?jǐn)]神經(jīng)網(wǎng)絡(luò)的心得時(shí),學(xué)長(zhǎng)也說(shuō):“求導(dǎo)快把我求爆了”。

時(shí)間來(lái)到一兩年后,我注意到學(xué)長(zhǎng)某天發(fā)了這樣一條朋友圈:“用tensorflow竟然一行就能寫個(gè)神經(jīng)網(wǎng)絡(luò),調(diào)包俠(調(diào)包指的是調(diào)用工具包,因?yàn)閠ensorflow封裝的很好,基本上調(diào)用幾個(gè)包就能完成之前要寫幾十上百行的代碼,所以當(dāng)時(shí)一般戲稱調(diào)包俠)太強(qiáng)了”。沒錯(cuò),各種神經(jīng)網(wǎng)絡(luò)編程工具開始被人們所使用了,神經(jīng)網(wǎng)絡(luò)編程的難度開始下降,或者說(shuō),市面上開始免費(fèi)贈(zèng)送精致煉金爐了。

比較著名的煉丹爐有Tensorflow、pytorch、Caffe。這里只列舉了python的相關(guān)包或這些包的python版本,matlab、C++也都有不少神經(jīng)網(wǎng)絡(luò)包。之后就只談python了。

正如師兄所說(shuō),最早大家普遍使用的是Tensorflow(之后就簡(jiǎn)稱tf了)了。(這里插播一條,我們平時(shí)用python包有很多簡(jiǎn)易寫法,例如import tensorflow as tf、import numpy as np、import pandas as pd等,然后某次人工智能課上就有了如下能氣死很多python人的釘釘直播對(duì)話[第一句是我說(shuō)的])

這就是混沌(無(wú)視小黑子)

回歸正題。雖然tf好像一開始就搶占了市場(chǎng),但是很快人們就不太用它了。原因有很多,例如比較麻煩的,tf2對(duì)tf1的兼容很差,或者說(shuō),很多tf1中能用的函數(shù)到了tf2就不能用了,這就導(dǎo)致了很嚴(yán)重的問題,即你從github上下載了一個(gè)神經(jīng)網(wǎng)絡(luò)模型發(fā)現(xiàn)它是用tf1寫的而你裝了tf2,那很可能是跑不起來(lái)的,可能要對(duì)代碼大動(dòng)刀,這嚴(yán)重影響了科研的效率。(雖然代碼復(fù)現(xiàn)也算是程序員的必修課了)

于是pytorch就漸漸地成為更多人的選擇,包括我也是更習(xí)慣用pytorch。

pytorch的一個(gè)很大的好處是,你不需要手寫反向傳播。也就是說(shuō),用pytorch寫神經(jīng)網(wǎng)絡(luò),你只需要寫神經(jīng)網(wǎng)絡(luò)有哪些層、寫正向傳播、計(jì)算損失函數(shù)loss,然后loss.backward()一句話就可以完成反向傳播。

當(dāng)然,這帶來(lái)的問題就是慢,真的很慢,再加上python本身就是比較慢的語(yǔ)言,這導(dǎo)致神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程基本上是機(jī)器學(xué)習(xí)人在焦急地看機(jī)器學(xué)習(xí)(想摸魚?想多了。服務(wù)器上跑程序,自己電腦上繼續(xù)debug)。

pytorch2.0登場(chǎng)了!雖然還不是穩(wěn)定版本,但大家總算有新的煉丹爐用了。

我淺看了幾篇推送,讓我印象比較深的幾個(gè)新變化:

  1. 從C++回歸python。pytorch之所以叫pytorch,其實(shí)是python版本的torch,所以pytorch1的很多底層實(shí)現(xiàn)是調(diào)用C++的(語(yǔ)言相互調(diào)用這很正常),在pytorch2.0中,基本上就是純python實(shí)現(xiàn)了

  2. 加速。據(jù)說(shuō)pytorch2.0要快很多。其實(shí)前不久python3.10版本也說(shuō)自己相比3.9快了很多,說(shuō)明python真的意識(shí)到自己太慢了(當(dāng)然,有人預(yù)測(cè)說(shuō)python3.14就比C快了,這個(gè)不太可能,畢竟解釋型語(yǔ)言比非常底層的C更快是很難的,而且3.11也不一定比3.10快很多)

  3. 更多可供調(diào)用的神經(jīng)網(wǎng)絡(luò)層。pytorch不光讓你只需要定義網(wǎng)絡(luò)結(jié)構(gòu),甚至幫你封裝了很多常用層,更加方便了神經(jīng)網(wǎng)絡(luò)編程。據(jù)說(shuō)這次增加了attention之類的層結(jié)構(gòu)

最后,祝煉金術(shù)師們煉金開心吧。不過(guò)新煉金爐怎么樣還是要實(shí)踐檢驗(yàn)了。

【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(1)——新煉丹爐的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
比如县| 锡林郭勒盟| 江北区| 综艺| 临清市| 广昌县| 石渠县| 菏泽市| 江陵县| 通道| 修文县| 东港市| 本溪市| 青冈县| 宁德市| 昆明市| 会泽县| 门头沟区| 香格里拉县| 鲁山县| 通榆县| 潢川县| 沿河| 根河市| 青海省| 芦溪县| 兴文县| 彩票| 达孜县| 库尔勒市| 汝阳县| 丹棱县| 吉木乃县| 上饶市| 泗阳县| 疏勒县| 土默特左旗| 清原| 神农架林区| 洱源县| 泸水县|