十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
人工智能和Python的淵源在于。就像我們統(tǒng)計數(shù)據(jù)或選擇用excel制作表格時,因為在需要用到加減乘除或者、函數(shù)等時,只需要套用公司就可以。因為SUM、AVERAGE等這樣的函數(shù)運行的背后,是C++/C#等語言已經(jīng)編寫好了代碼,所以Excel只是工具和展現(xiàn)形式并不是它做計算。同理在學習人工智能時Python只是用來操作深度學習框架的工具,實際負責運算的主要模塊并不依靠Python,真正起作用的是也是一大堆復雜的C++ / CUDA程序。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、渭濱網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、渭濱網(wǎng)絡(luò)營銷、渭濱企業(yè)策劃、渭濱品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供渭濱建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
深度學習人工智能時,自己計算太復雜,還要寫C++代碼操作,這時程序員就想要不搞一套類似復雜的Excel配置表,直接搭建神經(jīng)網(wǎng)絡(luò)、填參數(shù)、導入數(shù)據(jù),一點按鈕就直接開始訓練模型、得出結(jié)果。這個方法簡單實用可是神經(jīng)網(wǎng)絡(luò)搭建起來太復雜,需要填寫的參數(shù)太多,各種五花八門的選項也很難做成直觀的圖形工具。只能用一個類似Python的相對好用的語言,通過簡化的程序代碼來搭建神經(jīng)網(wǎng)絡(luò)、填寫參數(shù)、導入數(shù)據(jù),并調(diào)用執(zhí)行函數(shù)進行訓練。通過這種語言來描述模型、傳遞參數(shù)、轉(zhuǎn)換好輸入數(shù)據(jù),然后扔到復雜的深度學習框架里面去計算。那么為什么會選擇Python?
科學家們很早就喜歡用Python實驗算法,也善于使用numpy做科學計算,用pyplot畫數(shù)據(jù)圖。恰好Google內(nèi)部用Python也非常多,所以采用Python也是必然的。除Python外,實際上TensorFlow框架還支持JavaScript、c++、Java、GO、等語言。按說人工智能算法用這些也可以。但是官方說了,除Python之外的語言不一定承諾API穩(wěn)定性。所以人工智能和Python就密不可分了。
關(guān)于人工智能和Python的關(guān)系,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關(guān)于python編程的技巧及素材等內(nèi)容,可以點擊本站的其他文章進行學習。
提到人工智能就一定會提到Python,有的初學者甚至認為人工智能和Python是劃等號的,其實Python是一種計算機程序設(shè)計語言。是一種動態(tài)的、面向?qū)ο蟮哪_本語言,開始時是用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發(fā)。而人工智能通俗講就是人為的通過嵌入式技術(shù)把程序?qū)懭霗C器中使其實現(xiàn)智能化。顯然人工智能和Python是兩個不同的概念。人工智能和Python的淵源在于。就像我們統(tǒng)計數(shù)據(jù)或選擇用excel制作表格時,因為在需要用到加減乘除或者、函數(shù)等時,只需要套用公司就可以。因為SUM、AVERAGE等這樣的函數(shù)運行的背后,是C++/C#等語言已經(jīng)編寫好了代碼,所以Excel只是工具和展現(xiàn)形式并不是它做計算。同理在學習人工智能時Python只是用來操作深度學習框架的工具,實際負責運算的主要模塊并不依靠Python,真正起作用的是也是一大堆復雜的C++
/ CUDA程序。
深度學習人工智能時,自己計算太復雜,還要寫C++代碼操作,這時程序員就想要不搞一套類似復雜的Excel配置表,直接搭建神經(jīng)網(wǎng)絡(luò)、填參數(shù)、導入數(shù)據(jù),一點按鈕就直接開始訓練模型、得出結(jié)果。這個方法簡單實用可是神經(jīng)網(wǎng)絡(luò)搭建起來太復雜,需要填寫的參數(shù)太多,各種五花八門的選項也很難做成直觀的圖形工具。只能用一個類似Python的相對好用的語言,通過簡化的程序代碼來搭建神經(jīng)網(wǎng)絡(luò)、填寫參數(shù)、導入數(shù)據(jù),并調(diào)用執(zhí)行函數(shù)進行訓練。通過這種語言來描述模型、傳遞參數(shù)、轉(zhuǎn)換好輸入數(shù)據(jù),然后扔到復雜的深度學習框架里面去計算。那么為什么會選擇Python?科學家們很早就喜歡用Python實驗算法,也善于使用numpy做科學計算,用pyplot畫數(shù)據(jù)圖。恰好Google內(nèi)部用Python也非常多,所以采用Python也是必然的。除Python外,實際上TensorFlow框架還支持JavaScript、c++、Java、GO、等語言。按說人工智能算法用這些也可以。但是官方說了,除Python之外的語言不一定承諾API穩(wěn)定性。所以人工智能和Python就密不可分了。單說人工智能的核心算法,那是是完全依賴于C/C++的,因為是計算密集型,需要非常精細的優(yōu)化,還需要GPU、專用硬件之類的接口,這些都只有C/C++能做到。所以某種意義上其實C/C++才是人工智能領(lǐng)域最重要的語言。Python是這些庫的API
binding,要開發(fā)一個其他語言到C/C++的跨語言接口,Python是最容易的,比其他語言的ffi門檻要低不少,CPython的C
API是雙向融合的,可以直接對外暴露封裝過的Python對象,還可以允許用戶通過繼承這些自定義對象來引入新特性,甚至可以從C代碼當中再調(diào)用Python的函數(shù)。Python一直都是科學計算和數(shù)據(jù)分析的重要工具,Python是這些庫的API
binding,要開發(fā)一個其他語言到C/C++的跨語言接口,Python是最容易的,比其他語言的ffi門檻要低不少,CPython的C
API是雙向融合的,可以直接對外暴露封裝過的Python對象,還可以允許用戶通過繼承這些自定義對象來引入新特性,甚至可以從C代碼當中再調(diào)用Python的函數(shù)。都說時勢造英雄,也可以說是人工智能和Python互相之間成就者對方,人工智能算法促進Python的發(fā)展,而Python也讓算法更加簡單。
How?Neural?Networks?Extrapolate:?From?Feedforward?to?Graph?Neural?Networks
ICLR2021最高分論文????????????
52頁論文,正文占9頁,主要都是附錄,不過附錄里很多圖片(一頁就一兩張圖),排除這些一頁一圖的,只有40頁
我們研究用梯度下降法訓練的神經(jīng)網(wǎng)絡(luò)如何外推,也就是說,它們在訓練分布的支持之外學習什么。以前的工作報告了使用神經(jīng)網(wǎng)絡(luò)進行外推時混合的實證結(jié)果:雖然前饋神經(jīng)網(wǎng)絡(luò),即多層感知器(MLP)在某些簡單任務(wù)中外推效果不好,但圖形神經(jīng)網(wǎng)絡(luò)(GNN)——帶有MLP模塊的結(jié)構(gòu)化網(wǎng)絡(luò)——在更復雜的任務(wù)中取得了一些成功。為了得到理論解釋,我們確定了MLPs和GNNs外推良好的條件。首先,我們量化了ReLU-MLPs從原點沿任意方向快速收斂到線性函數(shù)的觀測結(jié)果,這意味著ReLU-MLPs不能外推大多數(shù)非線性函數(shù)。但是,當訓練分布足夠“多樣化”時,他們可以證明學習線性目標函數(shù)。其次,在分析GNNs的成功和局限性時,這些結(jié)果提出了一個假設(shè),我們提供了理論和經(jīng)驗證據(jù):GNNs在將算法任務(wù)外推到新數(shù)據(jù)(例如。,較大的圖或邊權(quán)重)依賴于編碼體系結(jié)構(gòu)或特征中特定于任務(wù)的非線性。我們的理論分析建立在過度參數(shù)化網(wǎng)絡(luò)與神經(jīng)切線核的聯(lián)系上。根據(jù)經(jīng)驗,我們的理論適用于不同的培訓環(huán)境
1簡介
人類在許多任務(wù)中推斷得很好。例如,我們可以對任意大的數(shù)應(yīng)用算術(shù)。人們可能想知道,神經(jīng)網(wǎng)絡(luò)是否也能做到這一點,并將其推廣到任意遠離訓練數(shù)據(jù)的示例中(Lake et al.,2017)。奇怪的是,以前的工作報告混合外推結(jié)果與神經(jīng)網(wǎng)絡(luò)。早期的工作表明,前饋神經(jīng)網(wǎng)絡(luò),又稱多層感知器(MLPs),在學習簡單多項式函數(shù)時不能很好地進行外推(BarnardWessels,1992;HaleySoloway,1992年)。然而,最近的研究表明,圖神經(jīng)網(wǎng)絡(luò)(GNNs)(Scarselli et al.,2009)是一類具有MLP構(gòu)建塊的結(jié)構(gòu)化網(wǎng)絡(luò),在具有挑戰(zhàn)性的算法任務(wù)中,如預測物理系統(tǒng)的時間演化(Battaglia et al.,2016),可以推廣到比訓練圖大得多的圖,學習圖形算法(Velickovic et al.,2020),求解數(shù)學方程(LampleCharton,2020)。
為了解釋這個難題,我們正式研究了梯度下降(GD)訓練的神經(jīng)網(wǎng)絡(luò)是如何外推的,即它們在訓練分布的支持之外學習什么。我們說,如果一個神經(jīng)網(wǎng)絡(luò)在訓練分布之外學習了一個任務(wù),它就能很好地進行外推。乍一看,似乎神經(jīng)網(wǎng)絡(luò)可以在訓練分布之外任意行為,因為它們具有高容量(Zhang et al.,2017),并且是通用逼近器(Cybenko,1989;Funahashi,1989年;Hornik等人,1989年;庫爾科娃,1992年)。然而,神經(jīng)網(wǎng)絡(luò)受到梯度下降訓練的限制(Hardt等人,2016;Soudry等人,2018年)。在我們的分析中,我們通過類比過參數(shù)化神經(jīng)網(wǎng)絡(luò)的訓練動態(tài)和通過神經(jīng)切線核(NTK)的核回歸,明確考慮了這種隱式偏差(Jacot等人,2018)。
從前饋網(wǎng)絡(luò)、最簡單的神經(jīng)網(wǎng)絡(luò)和更復雜的體系結(jié)構(gòu)(如GNNs)的構(gòu)建塊開始,我們建立了由GD訓練的具有ReLU激活的過參數(shù)mlp的預測從原點沿任意方向收斂到線性函數(shù)。我們證明了兩層網(wǎng)絡(luò)的收斂速度,并從經(jīng)驗上觀察到收斂經(jīng)常發(fā)生在訓練數(shù)據(jù)附近(圖1),這表明ReLU-MLPs不能很好地外推大多數(shù)非線性任務(wù)。我們強調(diào),我們的結(jié)果并不是基于ReLU網(wǎng)絡(luò)具有有限多個線性區(qū)域的事實(Arora et al.,2018;HaninRolnick,2019年;Hein等人,2019年)。雖然有有限多個線性區(qū)域意味著ReLU MLPs最終會變?yōu)榫€性,但MLPs是否會學習到接近訓練分布的正確目標函數(shù)并沒有說明。相比之下,我們的結(jié)果是非漸近的,并且量化了MLPs將學習什么樣的函數(shù)接近于訓練分布。其次,我們確定了mlp外推良好的條件:任務(wù)是線性的,訓練分布的幾何結(jié)構(gòu)是充分“多樣化”的。據(jù)我們所知,我們的結(jié)果是這種前饋神經(jīng)網(wǎng)絡(luò)的第一個外推結(jié)果。
然后,我們將我們對前饋神經(jīng)網(wǎng)絡(luò)的見解與GNNs聯(lián)系起來,以解釋GNNs在某些算法任務(wù)中外推得好的原因。先前的工作報告了可以通過動態(tài)規(guī)劃(DP)解決的任務(wù)的成功外推(Bellman,1966),其計算結(jié)構(gòu)與GNNs一致(Xu等人,2020)。DP更新通??梢苑纸鉃榉蔷€性和線性步驟。因此,我們假設(shè)GD訓練的GNN可以在DP任務(wù)中很好地外推,如果我們在架構(gòu)和輸入表示中編碼適當?shù)姆蔷€性(圖2)。重要的是,編碼非線性可能不需要GNNs插值,因為MLP模塊可以很容易地學習訓練分布中的許多非線性函數(shù)(Cybenko,1989;Hornik等人,1989年;Xu等人,2020),但GNNs正確外推至關(guān)重要。我們使用圖NTK(Du等人,2019b)證明了簡化情況下的這一假設(shè)。在經(jīng)驗上,我們驗證了三個DP任務(wù)的假設(shè):最大度、最短路徑和n體問題。我們證明了具有適當結(jié)構(gòu)、輸入表示和訓練分布的GNNs可以很好地預測具有未知大小、結(jié)構(gòu)、邊權(quán)值和節(jié)點特征的圖。我們的理論解釋了以往工作的經(jīng)驗成功,并指出了它們的局限性:成功的外推依賴于編碼任務(wù)特定的非線性,這需要領(lǐng)域知識或廣泛的模型搜索。從更廣泛的角度來看,我們的見解超越了GNNs,并廣泛應(yīng)用于其他神經(jīng)網(wǎng)絡(luò)。
總之,我們研究神經(jīng)網(wǎng)絡(luò)如何外推。首先,由GD訓練的ReLU-mlp以O(shè)(1/t)的速率沿原點方向收斂為線性函數(shù)。其次,為了解釋為什么GNNs在一些算法任務(wù)中可以很好地外推,我們證明了ReLU-MLPs在線性任務(wù)中可以很好地外推,從而引出一個假設(shè):當適當?shù)姆蔷€性被編碼到結(jié)構(gòu)和特征中時,神經(jīng)網(wǎng)絡(luò)可以很好地外推。我們用一個簡化的例子證明了這個假設(shè),并為更一般的情況提供了經(jīng)驗支持。
1.1相關(guān)工作
早期的工作顯示了MLP不能很好地外推的示例任務(wù),例如學習簡單多項式(BarnardWessels,1992;HaleySoloway,1992年)。相反,我們展示了ReLU MLPs如何外推的一般模式,并確定MLPs外推良好的條件。最近的工作研究了在NTK和平均場兩種情況下,梯度下降對MLP產(chǎn)生的隱性偏差(Bietti和Mairal,2019;ChizatBach,2018年;Song等人,2018年)。與我們的結(jié)果相關(guān),一些工作表明MLP預測收斂于“簡單”分段線性函數(shù),例如,具有很少的線性區(qū)域(HaninRolnick,2019;Maennel等人,2018年;Savarese等人,2019年;威廉姆斯等人,2019年)。我們的工作不同之處在于,這些工作都沒有明確研究外推法,有些只關(guān)注一維輸入。最近的研究還表明,在NTK區(qū)域的高維環(huán)境中,MLP在某些標度極限下至多是一個漸近線性預測因子(Ba等人,2020;Ghorbani等人,2019年)。我們研究不同的設(shè)置(外推),我們的分析是非漸近性質(zhì),不依賴于隨機矩陣理論。
先前的工作通過在較大的圖上進行測試來探索GNN外推(Battaglia et al.,2018;Santoro等人,2018年;薩克斯頓等人,2019年;Velickovic等人,2020年)。我們是第一個從理論上研究GNN外推法的人,我們完成了外推法的概念,包括看不見的特征和結(jié)構(gòu)。
2準備工作
3前饋神經(jīng)網(wǎng)絡(luò)如何外推
前饋網(wǎng)絡(luò)是最簡單的神經(jīng)網(wǎng)絡(luò)和更復雜的體系結(jié)構(gòu)(如GNNs)的構(gòu)建塊,因此我們首先研究它們在GD訓練時是如何外推的。在本文中,我們假設(shè)ReLU激活。第3.3節(jié)包含其他激活的初步結(jié)果。
3.1 RELU MLP的線性外推行為
通過架構(gòu),ReLU網(wǎng)絡(luò)學習分段線性函數(shù),但是在訓練數(shù)據(jù)的支持之外,這些區(qū)域究竟是什么樣的呢?圖1舉例說明了當GD對各種非線性函數(shù)進行訓練時,ReLU MLP如何進行外推。這些例子表明,在訓練支持之外,預測很快就會沿著原點的方向線性化。我們通過線性回歸對MLPs的預測進行了系統(tǒng)的驗證:決定系數(shù)(R2)總是大于0.99(附錄C.2)。也就是說,ReLU MLPs幾乎立即在訓練數(shù)據(jù)范圍之外“線性化”。
我們使用GD通過神經(jīng)切線核(NTK)訓練的神經(jīng)網(wǎng)絡(luò)的隱式偏差來形式化這個觀察:GD訓練的過參數(shù)化網(wǎng)絡(luò)的優(yōu)化軌跡等價于具有特定神經(jīng)切線核的核回歸的軌跡,在一系列被稱為“NTK制度”的假設(shè)下(Jacot等人,2018年)。我們在這里提供了一個非正式的定義;更多詳情,請參閱Jacot等人(2018)和附錄A。
定義2。
(非正式)在NTK區(qū)域訓練的神經(jīng)網(wǎng)絡(luò)是無限寬的,以一定的比例隨機初始化,并且由GD以無窮小的步長訓練。
先前的工作通過NTK分析過參數(shù)化神經(jīng)網(wǎng)絡(luò)的優(yōu)化和分布泛化(Allen-Zhu等人,2019a;b類;Arora等人,2019a;b類;曹顧,2019;杜等人,2019c;一個;李亮,2018;日田和鈴木,2021年)。相反,我們分析外推。
定理1將我們從圖1中觀察到的結(jié)果形式化:在訓練數(shù)據(jù)范圍之外,沿著原點的任何方向tv,兩層ReLU MLP的預測迅速收斂為速率為O(1/t)的線性函數(shù)。線性系數(shù)β收斂速度中的常數(shù)項依賴于訓練數(shù)據(jù)和方向v。證據(jù)見附錄B.1
定理1
ReLU網(wǎng)絡(luò)具有有限多個線性區(qū)域(Arora等人,2018;漢寧和羅爾尼克,2019),因此他們的預測最終成為線性。相反,定理1是一個更細粒度的分析MLP如何外推,并提供了收斂速度。雖然定理1假設(shè)兩層網(wǎng)絡(luò)處于NTK狀態(tài),但實驗證實,線性外推行為發(fā)生在具有不同深度、寬度、學習速率和批量大小的網(wǎng)絡(luò)上(附錄C.1和C.2)。我們的證明技術(shù)也可能擴展到更深層次的網(wǎng)絡(luò)。
圖4a提供了一個更積極的結(jié)果:MLP在許多不同的超參數(shù)上很好地外推了線性目標函數(shù)。雖然學習線性函數(shù)一開始似乎非常有限,但在第4節(jié)中,這一見解將有助于解釋GNN在非線性實際任務(wù)中的外推特性。在此之前,我們首先從理論上分析了MLPs外推的好時機。
3.2當RELU MLPS可證明外推井
圖4a顯示,當目標函數(shù)為線性時,MLP可以很好地外推。然而,這并不總是正確的。在本節(jié)中,我們展示了成功的外推依賴于訓練數(shù)據(jù)的幾何結(jié)構(gòu)。直觀地說,訓練分布必須足夠“多樣化”,以便進行正確的推斷
我們提供了兩個條件,將訓練數(shù)據(jù)的幾何結(jié)構(gòu)與外推聯(lián)系起來。引理1指出,過參數(shù)化的mlp只需二維例子就可以學習線性目標函數(shù)。
實驗:訓練數(shù)據(jù)的幾何結(jié)構(gòu)影響外推。
定理2中的條件形式化了一種直覺,即訓練分布必須是“多樣的”,才能成功地進行外推,例如,D包括所有方向。從經(jīng)驗上講,當滿足定理2的條件時(圖4b中的“all”),外推誤差確實很小。相反,當訓練示例僅限于某些方向時,外推誤差要大得多(圖4b和圖3)。
與之前的工作相關(guān),定理2提出了為什么虛假相關(guān)性可能會損害外推,補充了因果關(guān)系論點(Arjovsky et al.,2019;Peters等人,2016年;Rojas Carulla等人,2018年)。當訓練數(shù)據(jù)具有虛假相關(guān)性時,某些特征組合丟失;e、 例如,駱駝可能只出現(xiàn)在沙漠中的圖像收集。因此,定理2的條件不再成立,模型可能外推錯誤。定理2也類似于線性模型的可辨識條件,但更為嚴格。如果訓練數(shù)據(jù)具有全(特征)秩,我們可以唯一地識別一個線性函數(shù)。mlp更具表現(xiàn)力,因此識別線性目標函數(shù)需要附加約束。
綜上所述,我們分析了ReLU-MLPs是如何外推的,并提供了兩個啟示:(1)MLPs由于其線性外推而不能外推大多數(shù)非線性任務(wù)(定理1);當目標函數(shù)是線性函數(shù)時,如果訓練分布是“多樣的”(定理2),mlp可以很好地外推。在下一節(jié)中,這些結(jié)果將幫助我們理解更復雜的網(wǎng)絡(luò)是如何外推的。
3.3具有其他激活功能的MLPS
在繼續(xù)討論GNNs之前,我們通過對其他激活函數(shù)tanh的實驗來完成MLPs的描述σ(x) =tanh(x),余弦σ(x) =cos(x)(LapedesFarber,1987年;McCaughan,1997年;Sopena和Alquezar,1994),和σ(x) =x2(杜和李,2018;Livni等人,2014年)。詳情見附錄C.4。當激活函數(shù)和目標函數(shù)相似時,MLPs外推效果較好;e、 例如,當學習tanh時,tanh激活可以很好地推斷,但不能推斷其他功能(圖5)。而且,每個激活函數(shù)都有不同的局限性。要用tanh激活外推tanh函數(shù),訓練數(shù)據(jù)范圍必須足夠?qū)?。當學習具有二次激活的二次函數(shù)時,只有兩層網(wǎng)絡(luò)可以很好地進行外推,而更多的層可以得到更高階的多項式。對于高維數(shù)據(jù),余弦激活很難優(yōu)化,因此我們只考慮一維/二維余弦目標函數(shù)。
4圖形神經(jīng)網(wǎng)絡(luò)如何外推
上面,我們看到非線性任務(wù)中的外推對于MLP來說是困難的。盡管存在這一局限性,GNNs在一些非線性算法任務(wù)中表現(xiàn)出了很好的外推能力,如直觀物理(Battaglia et al.,2016;Janner等人,2019),圖算法(Battaglia等人,2018;Velickovic等人,2020)和符號數(shù)學(LampleCharton,2020)。為了解決這個差異,我們建立在MLP結(jié)果的基礎(chǔ)上,研究GD訓練的GNNs是如何外推的。
4.1假設(shè):線性算法對齊有助于外推
我們從一個例子開始:訓練GNNs來解決最短路徑問題。對于這項任務(wù),先前的工作觀察到,具有最小聚集的改進GNN架構(gòu)可以推廣到比訓練集中的圖更大的圖(Battaglia et al.,2018;Velickovic等人,2020):
我們首先提供一個直觀的解釋(圖2a)。最短路徑可通過Bellman-Ford(BF)算法(Bellman,1958)求解,并進行以下更新
其中w(v,u)是邊(v,u)的權(quán)重,d[k][u]是k步內(nèi)到節(jié)點u的最短距離。這兩個方程可以很容易地對齊:如果GNNs的MLP模塊學習一個線性函數(shù)d[k],那么它將模擬BF算法?1] [v]+w(v,u)。由于mlp可以外推線性任務(wù),這種“對齊”可以解釋為什么GNNs可以在這個任務(wù)中很好地外推。
為了進行比較,我們可以解釋為什么我們不希望GNN使用更常用的和聚合(Eqn。1) 在這項任務(wù)中推斷得很好。對于和聚合,MLP模塊需要學習一個非線性函數(shù)來模擬BF算法,但定理1表明,它們不會在訓練支持之外外推大多數(shù)非線性函數(shù)。
我們可以將上述直覺推廣到其他算法任務(wù)。許多GNNs外推良好的任務(wù)可以通過動態(tài)規(guī)劃(DP)來解決(Bellman,1966),這是一種具有類似GNNs(Eqn)的遞歸結(jié)構(gòu)的算法范式。1) (Xu等人,2020年)。
定義3。動態(tài)規(guī)劃(DP)是一個帶有更新的遞歸過程
其中答案[k][s]是迭代k和狀態(tài)s索引的子問題的解決方案,DP Update是一個任務(wù)特定的更新函數(shù),它基于上一次迭代解決子問題。從更廣泛的角度出發(fā),我們假設(shè):如果我們將適當?shù)姆蔷€性編碼到模型結(jié)構(gòu)和輸入表示中,使MLP模塊只需要學習接近線性的步驟,那么所得到的神經(jīng)網(wǎng)絡(luò)就可以很好地外推。
假設(shè)1。
我們的假設(shè)建立在(Xu等人,2020)的算法對齊框架之上,該框架指出,如果模塊“對齊”以便于學習(可能是非線性)函數(shù),則神經(jīng)網(wǎng)絡(luò)插值良好。成功的外推更難:模塊需要與線性函數(shù)對齊。
線性算法對準的應(yīng)用。
一般來說,線性算法對準不局限于GNN,廣泛應(yīng)用于神經(jīng)網(wǎng)絡(luò)。為了滿足這種情況,我們可以在結(jié)構(gòu)或輸入表示中編碼適當?shù)姆蔷€性操作(圖2)。使用GNNs學習DP算法是在體系結(jié)構(gòu)中編碼非線性的一個例子(Battaglia等人,2018;Corso等人,2020年)。另一個例子是對體系結(jié)構(gòu)中的日志和exp變換進行編碼,以幫助外推算術(shù)任務(wù)中的乘法(Trask等人,2018;MadsenJohansen,2020年)。神經(jīng)符號程序進一步發(fā)展,并對符號操作庫進行編碼,以幫助推斷(Johnson等人,2017年;Mao等人,2019年;易等,2018年)。
對于某些任務(wù),更改輸入表示可能更容易(圖2b)。有時,我們可以將目標函數(shù)f分解為f=g? 將h嵌入特征嵌入h和一個簡單的目標函數(shù)g中,我們的模型可以很好地推斷。我們可以通過使用領(lǐng)域知識通過專門的特征或特征轉(zhuǎn)換獲得h(LampleCharton,2020;Webb等人,2020年),或通過X\D中未標記的未標記的未標記的分發(fā)數(shù)據(jù)的表示學習(例如,BERT)(Chen等人,2020年);Devlin等人,2019年;胡等,2020;Mikolov等人,2013b;Peters等人,2018年)。這為表示如何幫助在不同應(yīng)用領(lǐng)域進行外推提供了新的視角。例如,在自然語言處理中,預處理表示(Mikolov等人,2013a;WuDredze,2019)和使用領(lǐng)域知識進行特征轉(zhuǎn)換(袁等,2020年;Zhang等人,2019)幫助模型在語言之間進行概括,這是一種特殊的外推。在定量金融中,確定正確的“因素”或特征對于深入學習模型至關(guān)重要,因為金融市場可能經(jīng)常處于外推制度中(Banz,1981;法蘭西,1993年;羅斯,1976)。
線性算法對齊解釋了文獻中成功的外推,并指出外推一般更難:編碼適當?shù)姆蔷€性通常需要領(lǐng)域?qū)<一蚰P退阉鳌F浯?,我們?yōu)槲覀兊募僭O(shè)提供理論和實證支持。
4.2理論和經(jīng)驗支持
我們驗證了我們對三個DP任務(wù)的假設(shè):最大度、最短路徑和n-體問題,并證明了最大度假設(shè)。我們強調(diào)了圖結(jié)構(gòu)在外推中的作用。
理論分析。
我們從一個簡單而基本的任務(wù)開始:學習一個圖的最大度,一個DP的特例。作為定理1的推論,常用的基于和的GNN(Eqn。1) 無法很好地推斷(證據(jù)見附錄B.4)。
推論1。
具有和聚集和和和讀出的GNNs在最大程度上不能很好地外推。為了實現(xiàn)線性算法對齊,我們可以對讀出器中唯一的非線性max函數(shù)進行編碼。定理3證實了具有最大讀數(shù)的GNN在這個任務(wù)中可以很好地外推。
定理3并不是緊跟定理2,因為GNNs中的MLP模塊只接受間接的監(jiān)視。我們分析圖NTK(Du等人,2019b)來證明附錄B.5中的定理3。雖然定理3假設(shè)相同的節(jié)點特征,但我們在經(jīng)驗上觀察到相同和不相同特征的相似結(jié)果(附錄中的圖16)。
條件的解釋。
定理3中的條件類似于定理2中的條件。這兩個定理都需要不同的訓練數(shù)據(jù),用定理3中的圖結(jié)構(gòu)或定理2中的方向來度量。在定理3中,如果所有訓練圖都具有相同的最大或最小節(jié)點度,例如,當訓練數(shù)據(jù)來自以下族之一時,違反了該條件:路徑、C-正則圖(具有C度的正則圖)、圈和階梯。
實驗:有助于推斷的架構(gòu)。
我們用兩個DP任務(wù)來驗證我們的理論分析:最大度和最短路徑(詳見附錄C.5和C.6)。而以前的工作只測試不同大小的圖(Battaglia et al.,2018;Velickovic等人,2020),我們還測試了具有不可見結(jié)構(gòu)、邊權(quán)重和節(jié)點特征的圖。結(jié)果支持了我們的理論。對于最大度,具有最大讀數(shù)的GNNs優(yōu)于具有和讀數(shù)的GNNs(圖6a),證實了推論1和定理3。對于最短路徑,具有最小讀數(shù)和最小聚集的GNN優(yōu)于具有和讀數(shù)的GNN(圖6a)。
實驗證實了訓練圖結(jié)構(gòu)的重要性(圖7)。有趣的是,這兩個任務(wù)支持不同的圖結(jié)構(gòu)。對于最大度,如定理3所預測的,當訓練在樹、完全圖、擴張圖和一般圖上時,GNNs外推效果很好,當訓練在4-正則圖、圈圖或梯形圖上時,外推誤差更大。對于最短路徑,當我們改變訓練圖的稀疏性時,外推誤差遵循U形曲線(附錄中的圖7b和圖18)。直覺上,在稀疏或稠密圖上訓練的模型可能學習退化解。
實驗:有助于推斷的表征。
最后,我們展示了一個很好的輸入表示幫助外推。我們研究了n體問題(Battaglia等人,2016;Watters等人,2017年)(附錄C.7),即預測重力系統(tǒng)中n個物體的時間演化。根據(jù)之前的工作,輸入是一個完整的圖形,其中節(jié)點是對象(Battaglia等人,2016)。
5與其他分布外設(shè)置的連接
我們討論幾個相關(guān)的設(shè)置。直觀地說,從我們上述結(jié)果的觀點來看,相關(guān)設(shè)置中的方法可以通過1)學習超出訓練數(shù)據(jù)范圍的有用非線性和2)將相關(guān)測試數(shù)據(jù)映射到訓練數(shù)據(jù)范圍來改進外推。
領(lǐng)域適應(yīng)研究對特定目標領(lǐng)域的泛化(Ben-David等人,2010;Blitzer等人,2008年;Mansour等人,2009年)。典型的策略會調(diào)整訓練過程:例如,使用來自目標域的未標記樣本來對齊目標和源分布(Ganin等人,2016;趙等,2018)。在訓練期間使用目標域數(shù)據(jù)可能會導致有用的非線性,并可能通過匹配目標和源分布來減輕外推,盡管學習映射的正確性取決于標簽分布(Zhao等人,2019)。
對大量未標記數(shù)據(jù)的自監(jiān)督學習可以學習超出標記訓練數(shù)據(jù)范圍的有用非線性(Chen et al.,2020;Devlin等人,2019年;He等人,2020年;Peters等人,2018年)。因此,我們的結(jié)果提出了一個解釋,為什么像BERT這樣的預訓練表示可以提高分布外魯棒性(Hendrycks et al.,2020)。此外,自監(jiān)督學習可以將語義相似的數(shù)據(jù)映射到相似的表示,因此映射后的一些域外實例可能會落入訓練分布中。
不變模型旨在學習在多個訓練分布中尊重特定不變性的特征(Arjovsky et al.,2019;Rojas Carulla等人,2018年;周等人,2021)。如果模型真的學習到了這些不變性,這可能發(fā)生在線性情況下,當存在混雜或反因果變量時(Ahuja等人,2021;Rosenfeld等人,2021),這可能從本質(zhì)上增加了訓練數(shù)據(jù)范圍,因為模型可以忽略不變特征的變化。
分布魯棒性考慮了數(shù)據(jù)分布的小干擾,并確保模型在這些干擾下表現(xiàn)良好(GohSim,2010;Sagawa等人,2020年;Sinha等人,2018年;StaibJegelka,2019年)。相反,我們看的是更多的全局擾動。盡管如此,人們還是希望,有助于外推的修改通常也能提高對局部擾動的魯棒性。
6結(jié)論
本文是一個初步的步驟,正式了解如何神經(jīng)網(wǎng)絡(luò)訓練梯度下降外推。我們確定了MLPs和GNNs按期望外推的條件。我們還提出了一種解釋,說明GNNs在復雜的算法任務(wù)中是如何能夠很好地進行外推的:在架構(gòu)和特性中編碼適當?shù)姆蔷€性可以幫助外推。我們的結(jié)果和假設(shè)與本文和文獻中的實證結(jié)果一致
近期和朋友聊天時聽到了這樣一個觀點:在今天這個多變的社會里,做職業(yè)規(guī)劃,根本就是一件浪費時間的事情。
因為各行業(yè)的變化實在是太快了,今天你規(guī)劃在這個行業(yè)里好好大干一番,可能明天整個行業(yè)就突然完蛋了。
你根本沒法預料10年甚至兩年以后你所處的行業(yè)會發(fā)生什么,在這種情況下進行個人的職業(yè)規(guī)劃,沒有任何意義。
我相信有很多人,跟前面這位朋友所持的觀點是一致的,那么我們今天就來聊一聊,在這個瞬息萬變的時代,對于年輕人來說,是否有必要進行職業(yè)規(guī)劃?
誠然,這個社會確實是多變的,每時每刻都有新鮮的東西從不知道什么地方冒出來,每分每秒,也有太多曾經(jīng)輝煌過的東西慢慢消失。
也許你前兩年一腳踏進了共享經(jīng)濟的風口當中,本打算用5~10年的時間干出一番事業(yè)來,誰曾想一夜之間風沒了,豬掉下來了,你的一番事業(yè)還見不到影子,拿到手的卻是一封裁員通知。
行業(yè)是如此,而技能甚至也會過時,前兩年大火的Go語言,現(xiàn)如今在招聘需求里面已經(jīng)難以見到,今天所有的招聘都在搶AI,搶神經(jīng)網(wǎng)絡(luò)方面的人才,但再過幾年會怎樣誰都不知道。
大時代的變化如浪潮一般風起云涌,而個人在其中難免會覺得變化來得太快,自己跟不上節(jié)奏。
從這一點看來,似乎我們的確難以把控、預測行業(yè)的變化。而這個時候去制定什么5年10年的職業(yè)規(guī)劃,看起來似乎真的沒有了太大意義。
然而,如果你真的這樣想,那恐怕你在思維上已經(jīng)陷入了一種誤區(qū)。
無論行業(yè)和社會上發(fā)生多大的變化與傾覆,個人的成長軌跡始終是連貫且統(tǒng)一的。
職業(yè)規(guī)劃,不是讓我們對行業(yè)的發(fā)展,甚至未來有可能出現(xiàn)的行業(yè)進行未卜先知式的預測,而是回歸于個人成長的本身,讓我們能夠時刻提醒自己在人生的某個階段應(yīng)該做什么,以及應(yīng)該做到什么。
很多人把職業(yè)生涯規(guī)劃想的太過復雜,其實這種規(guī)劃沒有那么神奇,你甚至可以簡單理解成一個人給自己在不同階段制定的不同目標,然后再規(guī)劃一個合理的達成路徑罷了。
哪怕是一個沒學歷、沒背景、沒技能的年輕人,在當今社會他也能找到一份自己可以從事的工作,比如去送外賣。
送外賣雖然辛苦,但收入也并不算太低。
當然,送外賣不管怎么說,也不是一個可以一直做下去的工作。但是只要他有心,勤奮一些,節(jié)儉一些,做幾年就能湊出一輛車的首付。
這時候,不用送外賣了,去開網(wǎng)約車吧!雖然依舊辛苦,可也不同風吹日曬,風里來雨里去了不是嗎?
再往后,有了更多的錢,還可以換輛商務(wù)車跑專車,或者換輛SUV跑旅游專車,收入將會有明顯的提升,工作強度也能適應(yīng)年齡的增長。
事實上,就連《駱駝祥子》中的祥子雖然不懂“職業(yè)生涯規(guī)劃”是什么意思,但他也有自己對人生未來發(fā)展的思慮與考量:租幾年車,買輛自己的車,成家立業(yè),多買幾輛車,開個車行。
只可惜,祥子遭遇的是整個大時代的悲哀,而我們面臨的,其實是蓬勃向上的社會機遇。
我們在這里思考一下,一個人,如果對自己的職業(yè)生涯缺乏規(guī)劃會怎樣?
對于絕大多數(shù)人來說,缺乏對職業(yè)生涯的規(guī)劃,會使其迷失在行業(yè)變化的顛簸,與日復一日的簡單勞作中。
現(xiàn)在在很多行業(yè)里都有一種現(xiàn)象叫做“35歲焦慮”。
所謂的35歲焦慮就是指疼一個人35歲時,他會漸漸變得患得患失,焦躁不安,感覺自己的人生壓力倍增。
原因很簡單,一方面年齡的增長,精力的衰退,讓人感覺自己的競爭力越來越弱,而身后跟著一群群虎視眈眈的“后浪”們,隨時準備把自己拍在沙灘上。
另一方面,上有父母,下有子女,手頭沒有存款,只有尚余20來年的房貸車貸。
今天早上聽說公司高層又在講“狼性”,講“996”,看看自己三高的體檢單,想要換份工作,卻發(fā)現(xiàn)招聘網(wǎng)站上紛紛寫著“年齡35歲以下”。
在這種情況下, 又怎么可能不焦慮呢?
可是換個角度再來想一想,35 40來歲,其實正是一個人事業(yè)的黃金時期,如果一個人在行業(yè)中有所建樹,擁有一定的資源與能力,40歲對于多數(shù)的管理崗來說,剛剛是他實現(xiàn)個人價值的開始。
那為什么卻有這么多人在面臨著35歲焦慮呢?其本質(zhì)就在于對于很多人來說,職業(yè)生涯缺少規(guī)劃,導致他錯過了應(yīng)該積累的時期。
對于一個對自己的職業(yè)有明確規(guī)劃的人來說,跟別人最大的不同就是,他會非常關(guān)注自己目前的職業(yè)狀態(tài)是否“可持續(xù)”。
而對于缺乏職業(yè)規(guī)劃的人來說,他們的職場生涯往往是“得過一天是一天?!?/p>
當一個人對自己的職業(yè)生涯缺乏規(guī)劃的時候,他所能考慮到的往往只有眼前。
而要命的是,如果一個人越是只能看到眼前,那么他越難以獲得持續(xù)的精進,生活就會變得越不穩(wěn)定,就越需要疲于奔命,就越是只能先顧眼前。毫無疑問,這是個可悲的惡性循環(huán)。
看看我們身邊有多少人正處于現(xiàn)在這樣的狀態(tài)呢,明明知道自己目前的工作沒有前途,明明知道這個行業(yè)已經(jīng)是日薄西山,卻受困于當下的條件,難以做出足夠的決心,只能先這么耗下去。
可耗下去的結(jié)果會是什么你我他都心知肚明,而在這一次又一次的拖延之中,他最大的損失,就是自己的光陰。
因此職業(yè)生涯其實非常重要,對于年輕人來說更是如此。
我們需要做的不是去預測自己在未來多少年實現(xiàn)財富自由,在什么時候做成公司的老總,而是明確的搞清楚,如何在正確的階段做正確的事情。
通常來說,我們會把職業(yè)生涯分為四個部分:技能學習期、職業(yè)嘗試期、職業(yè)穩(wěn)定期、職業(yè)成熟期。
而每個時期,都有各自的重點與目標。
比如正處在學習期剛剛踏入職場的年輕人,最不應(yīng)該追求的就是所謂的穩(wěn)定,因為在這個事情,你需要做的是試錯找到自己最適合的道路。
很多人批評現(xiàn)在年輕人不夠穩(wěn)重,一言不合就辭職,然而說實話,在我看來很多情況下“不喜歡,所以要換工作”其實是年輕人的正當訴求。
對于年輕人來說資歷是最大的資本,這個時候負擔小,精力旺盛,學習能力強,拿出幾年的時間去試錯,這點代價放到他整個職業(yè)生涯的旅程上來看根本就是微乎其微。
我曾經(jīng)招聘過一個應(yīng)屆生,以美工的身份入職,一個月的試用期里,小伙子的工作可以說是可圈可點。
眼看就要轉(zhuǎn)正了,他就突然跑來辭職,給出的理由是他覺得這份工作并不是他想做的,他不喜歡這個職業(yè),他真正想做的是去做影視后期,盡管他沒有相關(guān)的經(jīng)驗。
小伙子辭職了之后,我關(guān)注了一段時間他的動態(tài),很快他找了一家做后期的工作室去實習。
學習了半年之后,又離開了那家工作,重新找了一份正式的后期工作。
到了現(xiàn)在他已經(jīng)開了一家小工作室,專門從事高端婚禮年會的創(chuàng)意視頻制作工作。
從很多角度來說,像他這種毫無經(jīng)驗就裸辭,然后又跑去貿(mào)然進入一個完全陌生的行業(yè),很明顯是一個不合理也不理智的選擇。
但是,如果他是一個本身對自身看的很輕,又對自己的職業(yè)生涯有著明確規(guī)劃的人,那么這一步的果斷,其實正是他對未來奠定良好發(fā)展的基礎(chǔ)。
學習期之后,當一個人的職業(yè)生涯進入了穩(wěn)定期,這個時候他最重要的就是開始積累自己的能力與經(jīng)驗。
謹慎選擇一份在未來幾年相對穩(wěn)定,且能夠讓自己獲得持續(xù)成長的行業(yè),在行業(yè)中不斷的深耕下去,穩(wěn)定期的積累多寡,往往也就決定了他成熟期的收獲。
到了職業(yè)生涯的成熟期,前面所做的一切努力都開始得到回報,或許前面幾年你的收入并沒有很高,但到了此時你會發(fā)現(xiàn),自己的收入增長開始變得后勁十足。
在自身的發(fā)展之下,好一些會成為行業(yè)當中的優(yōu)秀之人,差一點也是經(jīng)驗豐富可以倚靠的老成持重之人。
人工智能是python語言的一大應(yīng)用領(lǐng)域,python也是最適合人工智能的語言,需要學習python,以下是學習大綱:
階段一:Python開發(fā)基礎(chǔ)
Python全棧開發(fā)與人工智能之Python開發(fā)基礎(chǔ)知識學習內(nèi)容包括:Python基礎(chǔ)語法、數(shù)據(jù)類型、字符編碼、文件操作、函數(shù)、裝飾器、迭代器、內(nèi)置方法、常用模塊等。
階段二:Python高級編程和數(shù)據(jù)庫開發(fā)
Python全棧開發(fā)與人工智能之Python高級編程和數(shù)據(jù)庫開發(fā)知識學習內(nèi)容包括:面向?qū)ο箝_發(fā)、Socket網(wǎng)絡(luò)編程、線程、進程、隊列、IO多路模型、Mysql數(shù)據(jù)庫開發(fā)等。
階段三:前端開發(fā)
Python全棧開發(fā)與人工智能之前端開發(fā)知識學習內(nèi)容包括:Html、CSS、JavaScript開發(fā)、Jquerybootstrap開發(fā)、前端框架VUE開發(fā)等。
階段四:WEB框架開發(fā)
Python全棧開發(fā)與人工智能之WEB框架開發(fā)學習內(nèi)容包括:Django框架基礎(chǔ)、Django框架進階、BBS+Blog實戰(zhàn)項目開發(fā)、緩存和隊列中間件、Flask框架學習、Tornado框架學習、Restful API等。
階段五:爬蟲開發(fā)
Python全棧開發(fā)與人工智能之爬蟲開發(fā)學習內(nèi)容包括:爬蟲開發(fā)實戰(zhàn)。
階段六:全棧項目實戰(zhàn)
Python全棧開發(fā)與人工智能之全棧項目實戰(zhàn)學習內(nèi)容包括:企業(yè)應(yīng)用工具學習、CRM客戶關(guān)系管理系統(tǒng)開發(fā)、路飛學城在線教育平臺開發(fā)等。
階段七:數(shù)據(jù)分析
Python全棧開發(fā)與人工智能之數(shù)據(jù)分析學習內(nèi)容包括:金融量化分析。
階段八:人工智能
Python全棧開發(fā)與人工智能之人工智能學習內(nèi)容包括:機器學習、數(shù)據(jù)分析 、圖像識別、自然語言翻譯等。
階段九:自動化運維開發(fā)
Python全棧開發(fā)與人工智能之自動化運維開發(fā)學習內(nèi)容包括:CMDB資產(chǎn)管理系統(tǒng)開發(fā)、IT審計+主機管理系統(tǒng)開發(fā)、分布式主機監(jiān)控系統(tǒng)開發(fā)等。
階段十:高并發(fā)語言GO開發(fā)
Python全棧開發(fā)與人工智能之高并發(fā)語言GO開發(fā)學習內(nèi)容包括:GO語言基礎(chǔ)、數(shù)據(jù)類型與文件IO操作、函數(shù)和面向?qū)ο?、并發(fā)編程等。
事實上,如果列入Java,那么React、jQuery等等,或者其他多種軟件包或框架也都需要被列入進來,然而這些顯然會在未來幾年中逐步更新?lián)Q代的。考慮到篇幅所限就不多敘述別的知識了。)
1.Go語言
今年10月的TIOBE編程語言人氣榜上,Go語言得到了簡單但有力的描述:“谷歌的Go語言幾乎無可匹敵,而這主要是受到Docker等Go語言編寫的容器應(yīng)用方案的大力推動?!?/p>
盡管Go語言最初的目的有實驗性質(zhì),但Docker以及其它企業(yè)都把它作為自身基礎(chǔ)設(shè)施的有力支柱,而理由則非常簡單:它擁有迅如閃電的編譯與執(zhí)行速度,可以使用簡單方法(Goroutines)支持并發(fā)機制,并且也為程序員們提供大量選項來構(gòu)建并維護現(xiàn)有及新型技術(shù)。然而Go語言的好處需要到代碼量達到一定量之后才能體會出來,比如當你遇見一個cpp文件一個小時都編譯不完的時候,你就知道簡化語法增加編譯速度有多重要了。Go同樣面向?qū)ο?,但它不存在類型結(jié)構(gòu)。
以下為Go語言中的“Hello World”編寫方式:
package main import "fmt" func main() { fmt.Println("Hello, World") }
2.Rust
與火狐瀏覽器同宗同源的Rust是一類系統(tǒng)編程語言,它運行速度極快、不存在段錯誤并且可以保障安全。與Go不同,Rust并不具備垃圾回收機制(Go的垃圾回收機制速度很快),因此Rust編程適用于嵌入式系統(tǒng)。
與Go類似,Rust依賴于代碼分支結(jié)構(gòu)——但Rust更為復雜。兩種語言都是免費,并且它們都擁有自己的支持工具生態(tài)系統(tǒng)。Rust博客主頁中的“穩(wěn)定性即可交付性”口號正是Rust的理念所在; 其在RedMonkt及其它編程語言榜單上皆擁有不俗表現(xiàn),其未來發(fā)展自然值得關(guān)注。
下面來看一段出色的Rust代碼示例:
let number = 13; println!("Tell me about {}", number); match number { // Match a single value 1 = println!("One!"), // Match several values 2 | 3 | 5 | 7 | 11 = println!("This is a prime"), // Match an inclusive range 13...19 = println!("A teen"), // Handle the rest of cases _ = println!("Ain't special"), } let boolean = true; // Match is an expression too let binary = match boolean { // The arms of a match must cover all the possible values false = 0, true = 1, }; println!("{} - {}", boolean, binary); }
3.Git
時至今日,每個人都需要使用版本控制系統(tǒng)(簡稱VCS)。VCS實際上就是一套容納代碼及數(shù)據(jù)的存儲庫。它能夠追蹤變更,并使用開源meld等diff工具進行變更查看。
各類VCS的工作原理大體相同。大家需要利用源代碼文件建立一個項目,而后即可隨時對其進行檢查、編輯而后確認(提交)。
由Linux之父Linus Torvalds編寫的Git是一套分布式VCS,因此其可供團隊成員以遠程方式使用各自的文件進行編輯,而后將變更的結(jié)果進行合并。如果存在沖突,也就是兩位成員對同一文件提交了不同編輯結(jié)果,Git則會在合并時以高亮方式顯示沖突部分。接著,大家必須手動編輯并修改這些內(nèi)容。從人氣角度講,Git已然所向披靡。
4.HTML
在今天探討的四種技術(shù)中,HTML顯然最為簡單。HTML是網(wǎng)頁標記語言,是瀏覽器能夠閱讀的語言。只要你寫的東西想要瀏覽器能正確顯示出來,那就要懂HTML。其中的/代表著關(guān)閉標簽,而且大多數(shù)HTML標簽都利用這種開放標簽加/關(guān)閉標簽的形式起效。(對于以HTML起始的內(nèi)容,標頭可選且為文檔中的不可見部分,而本體則容納可見部分。)
大多數(shù)其它HTML標簽用于實現(xiàn)布局與文本格式; 其同樣易于使用。盡管HTML的技術(shù)標準已經(jīng)相當陳舊,但其仍然被廣泛使用——如果大家尚不了解,請一定找點時間進行學習。
5.Python
如果,只能選擇掌握一種編程語言,那么我的答案是Python。早在互聯(lián)網(wǎng)誕生之前,Basic是每一位開發(fā)者所必須了解的語言選項; 如今Python就是新時代下的Basic。這是一種通用型編程語言,雖然沒人會利用其編寫那些“重量級”應(yīng)用——例如游戲或者操作系統(tǒng)(這類應(yīng)用仍然使用C++)。
Python易于學習,且使用縮進而非大括號標記結(jié)構(gòu)。以下代碼來自Python維基詞條:
parents, babies = (1, 1) while babies 100: print 'This generation has {0} babies'.format(babies) parents, babies = (babies, parents + babies)
Python語言帶有解釋特性,因此大家可以在Python shell中嘗試各種命令丈表達式。其速度很快,但相比優(yōu)化型編譯語言稍慢一點。它擁有規(guī)模龐大的資源庫,且可通過多種方式實現(xiàn)進一步提速。大家可以使用pypy等替代性方案或者利用Cython將其編譯為C; 如果大家了解C語言,也能夠編寫自己的C、Go或者Rust擴展。
Python在科學家群體中亦大受歡迎。最近推出的英特爾Python(免費)使得Python成為一種面向機器學習的可用語言,其適用場景包括大數(shù)據(jù)、神經(jīng)網(wǎng)絡(luò)以及其它相關(guān)技術(shù)。英特爾打造的這套發(fā)行版包含超過100套軟件包(NumPy、SciPy等),且專門進行了優(yōu)化以使用英特爾MKL及英特爾TBB庫——二者內(nèi)置于其中且可免費使用。大部分高強度任務(wù)都可由這些經(jīng)過優(yōu)化的英特爾庫負責執(zhí)行。
6.Linux
即使大家身為專業(yè)Windows用戶及程序員,Linux同樣值得加以關(guān)注,它能幫助您更快地學習,它還能使用多種技術(shù)方案。舉例來說,Python、Go以及Rust就更適合在Linux平臺上使用。(要在Windows上進行Rust程序編譯,大家需要使用微軟VC++或者MinGW——這是一套GNU編譯器與工具集合,專門用于Windows平臺上的開發(fā)與運行任務(wù))。
對于Windows用戶,大家只需要下載免費VirtualBox并安裝一套Linux發(fā)行版(我個人推薦Ubuntu 14.04 LTS或者16.04 LTS)即可開始Linux之旅。在此之后,大家即可學習Linux,安裝各類編程語言,運行本地LAMP(Linux Apache MySQL PHP)Web服務(wù)器甚至嘗試進行開發(fā)工作。