欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

編程做的漂移賽車游戲,目前世界上的計算機編程主要仍是英語

錢瀠龍2年前21瀏覽0評論
編程做的漂移賽車游戲,在游戲開發中,你可能會遇到目前世界上的計算機編程主要仍是英語類似的問題,可以參考如下:

編程做的漂移賽車游戲,目前世界上的計算機編程主要仍是英語?

中文是可以編程的,計算機最底層的語言不是英語,也不是中文,其實是二進制的01代碼,目前的效率是用16進制來表示二進制,中文可以用八卦和六十四卦來編程,用64進制來替代16進制,需要重新構架處理器,重新定義編寫指令集。

以前的字節是8位的,但要改為12位的,這樣得有人使用,我已經寫完64進制指令集了,有感興趣的朋友可以私信我,一起研究。

因為中文是象形會意文字,有些字是封裝好的,比如“肉”字“車”等字,只需組詞就可以表達一個意思了,如加雞,就是雞肉,加鴨就是鴨肉,加豬就是豬肉等等。車字加個汽就是汽車,加火就是火車,加馬就是馬車,不像英語,沒有規律,造詞只是重新排列字母,抽象。編程效率低下。

現在人類處于一場技術變革的前夜,隨著摩爾定律的極限,硬件集成極限的到來,需要一種更加優秀的編程語言,我想應該是漢語能當此重任,而漢語中的八卦和六十四卦可以解決底層的轉化問題,提高二進制的轉化率。因為六十四進制有4096種排列組合,漢字常用的大概3500個就夠了。以此來編程,音意同步,一種新的語言誕生了,就是六十四卦語言,它是漢語的子集語言,它就是自帶二進制機器碼的語言,說的話就是程序,不需要譯碼,將來可以直接即時試編程,人和計算機直接二進制機器碼交流,最低級底層的編程語言,也是高級語言。因為我們中國人可以直接用口訣使用,而非漢語的人類,是不具有這個能力的。

感興趣的朋友可以讀一讀我的文章,漢語編程六十四進制計算機指令集八卦算盤等等。

如何才能深度學習呢?

在今年的 ICML 上,深度學習理論成為最大的主題之一。會議第一天,Sanjeev Arora 就展開了關于深度學習理論理解的教程,并從四個方面分析了關于該領域的研究:非凸優化、超參數和泛化、深度的意義以及生成模型。

2017 年 12 月 NIPS 的 Test-of-Time Award 頒獎典禮上,Ali Rahimi 這樣呼吁人們加深對深度學習的理解:

我希望生活在這樣的一個世界,它的系統是建立在嚴謹可靠而且可證實的知識之上,而非煉金術。[……] 簡單的實驗和定理是幫助理解復雜大現象的基石。

Ali 的目標不是解散各個領域,而是「展開對話」。這個目標已經實現了,但對于目前的深度學習應被視為煉金術還是工程或科學,人們仍存在分歧。

7 個月后,在斯德哥爾摩舉行的國際機器學習會議 (ICML) 上,機器學習社區又聚焦了這個問題。此次大會與會者有 5000 多名,并累計發表論文 629 篇,這是基礎機器學習研究的「年度大戲」。而深度學習理論已成為此次會議的最大主題之一。

會議第一天,最大的房間里就擠滿了機器學習相關人員,他們準備聆聽 Sanjeev Arora 關于深度學習理論理解的教程。這位普林斯頓大學計算機科學教授在演講中總結了目前的深度學習理論研究領域,并將其分成四類:

非凸優化:如何理解與深度神經網絡相關的高度非凸損失函數?為什么隨機梯度下降法會收斂?

超參數和泛化:在經典統計理論中,為什么泛化依賴于參數的數量而非深度學習?存在其它較好的泛化方法嗎?

深度的意義:深度如何幫助神經網絡收斂?深度和泛化之間的聯系是什么?

生成模型:為什么生成對抗網絡(GAN)效果非常好?有什么理論特性能使模型穩定或者避免模式崩潰?

在這一系列的文章中,我們將根據最新的論文(尤其是 ICML2018 的論文),幫助大家直觀理解這四個方面。

第一篇文章將重點討論深度網絡的非凸優化問題。

非凸優化

我敢打賭,你們很多人都曾嘗試過訓練自己的「深度網絡」,結果卻因為無法讓它發揮作用而陷入自我懷疑。這不是你的錯。我認為都是梯度下降的錯。

Ali Rahimi 在 NIPS 演講中曾說,隨機梯度下降 (SGD) 的確是深度學習的基石,它應該解決高度非凸優化問題。理解它何時起作用,以及為什么起作用,是我們在深度學習的基本理論中一定會提出的最基本問題之一。具體來說,對于深度神經網絡的非凸優化研究可以分為兩個問題:

損失函數是什么樣的?

SGD 為什么收斂?

損失函數是什么樣的?

如果讓你想象一個全局最小值,很可能你腦海中出現的第一幅圖是這樣的:

二維世界中的全局最小值附近,函數是嚴格凸的(這意味著 hessian 矩陣的兩個特征值都是正數)。但在一個有著數十億參數的世界里,就像在深度學習中,全局最小值附近的方向都不平坦的可能性有多大?或者 hessian 中一個為零(或近似為零)的特征值都沒有的概率有多大?

Sanjeev Arora 在教程中寫的第一個評論是:損失函數的可能方向數量會隨著維度的增長呈指數增長。

直觀上看,全局最小值似乎不是一個點而是一個連接管(connected manifold)。這意味著如果找到了全局最小值,你就能夠穿過一條平坦的路徑,在這條道路上,所有的點都是最小值。海德堡大學的一個研究團隊在論文《Essentially No Barriers in Neural Network Energy Landscape》中證明了這一點。他們提出了一個更常規的說法,即任何兩個全局最小值都可以通過一條平坦的路徑連接。

在 MNIST 上的 CNN 或在 PTB 上的 RNN 已經是這樣的情況,但是該項研究將這種認知擴展到了在更高級的數據集(CIFAR10 和 CIFAR100)上訓練的更大網絡(一些 DenseNet 和 ResNet)上。為了找到這條路徑,他們使用了一種來自分子統計力學的啟發式方法,叫做 AutoNEB。其思想是在兩個極小值之間創建一個初始路徑(例如線性),并在該路徑上設置中心點。然后迭代地調整中心點的位置,以最小化每個中心點的損失,并確保中心點之間的距離保持不變(通過用彈簧建模中心點之間的空間)。

雖然他們沒有從理論上證明這個結果,但他們對為什么存在這樣的路徑給出了一些直觀的解釋:

如果我們擾亂單個參數,比如添加一個小常數,然后讓其它部分去自適應這種變化,仍然可以使損失最小化。因此可以認為,通過微調,無數其它參數可以「彌補」強加在一個參數上的改變。

因此,本文的結果可以幫助我們通過超參數化和高維空間,以不同的方式看待極小值。

通俗來說,當考慮神經網絡的損失函數時,你應該牢記一個給定的點周圍可能有非常多的方向。由此得出另一個結論,鞍點肯定比局部最小值多得多:在給定的關鍵點上,在數十億個可能的方向中,很可能會找到一個向下的方向(如果不是在全局最小值上)。這種認知在 NIPS 2014 年發表的論文《Identifying and attacking the saddle point problem in high-dimensional non-convex optimization》中被嚴格規范化,并得到了實證證明。

為什么 SGD 收斂(或不收斂)?

深度神經網絡優化的第二個重要問題與 SGD 的收斂性有關。雖然這種算法長期以來被看做是一種快速的近似版梯度下降,但我們現在可以證明 SGD 實際上收斂于更好、更一般的最小值。但我們能否將其規范化并定量地解釋 SGD 脫離局部極小值或鞍點的能力?

SGD 修改了損失函數

論文《An Alternative View: When Does SGD Escape Local Minima?》表明,實施 SGD 相當于在卷積(所以平滑)的損失函數上進行常規梯度下降。根據這一觀點并在某些假設下,他們證明了 SGD 將設法脫離局部最小值,并收斂到全局最小值附近的一個小區域。

SGD 由隨機微分方程控制

連續 SGD 徹底改變了我對這個算法的看法。在 ICML 2018 關于非凸優化的研討會上,Yoshua Bengio 在他關于隨機梯度下降、平滑和泛化的演講中提出了這個想法。SGD 不是在損失函數上移動一個點,而是一片點云或者說一個分布。

幻燈片摘自 Y. Bengio 在 ICML 2018 發表的演講。他提出用分布(或點云)代替點來看待 SGD。

這個點云的大小(即相關分布的方差)與 learning_rate / batch_size 因子成正比。Pratik Chaudhari 和 Stefano Soatto 在論文《Stochastic gradient descent performs variational inference, converges to limit cycles for deep networks》中證明了這一點。這個公式非常直觀:較低的 batch size 意味著梯度非常混亂(因為要在數據集一個非常小的子集上計算),高學習率意味著步驟混亂。

將 SGD 視為隨時間變化的分布可以得出:控制下降的方程現在是隨機偏微分方程。更準確地說,在某些假設下,論文表明控制方程實際上是一個 Fokker-Planck 方程。

幻燈片摘自 P. Chaudhari 和 S. Soatto 在 ICML 2018 發表的演講——《High-dimensional Geometry and Dynamics of Stochastic Gradient Descent for Deep Networks》。他們展示了如何從離散系統過渡到 Fokker-Plank 方程所描述的連續系統。

在統計物理學中,這種類型的方程描述了暴露在曳力 (使分布推移,即改變平均值) 和隨機力 (使分布擴散,即增加方差) 下的粒子的演化。在 SGD 中,曳力由真實梯度建模,而隨機力則對應算法的內在噪聲。正如上面的幻燈片所示,擴散項與溫度項 T = 1 /β= learning_rate /(2 * batch_size) 成正比,這再次顯示了該比值的重要性!

Fokker-Planck 方程下分布的演化。它向左漂移,隨時間擴散。圖源:維基百科

通過這個框架,Chaudhari 和 Soatto 證明了我們的分布將單調地收斂于某個穩定的分布(從 KL 散度的意義來說):

Pratik Chaudhari 和 Stefano Soatto 論文的一個主要定理,證明了分布的單調會收斂到穩定狀態(在 KL 散度意義中)。第二個方程表明,使 F 最小化相當于最小化某個潛在的?以及擴大熵的分布(溫度 1 /β控制的權衡)。

在上面的定理中有幾個有趣的觀點:

SGD 最小化的函數可以寫成兩項之和(Eq. 11):潛在Φ和熵的分布。溫度 1 /β控制這兩項的權衡。

潛在Φ只取決于數據和網絡的架構(而非優化過程)。如果它等于損失函數,SGD 將收斂到全局最小值。然而, 本文表明這種情況比較少見。而如果知道Φ與損失函數的距離,你將可以知道 SGD 收斂的概率。

最終分布的熵取決于 learning_rate/batch_size(溫度)的比例。直觀上看,熵與分布的大小有關,而高溫會導致分布具有更大的方差,這意味著一個平坦的極小值。平坦極小值的泛化能力更好,這與高學習率和低 batch size 能得到更優最小值的經驗是一致的。

因此,將 SGD 看作是一個隨時間變化的分布表明,在收斂性和泛化方面,learning_rate/batch_size 比每個獨立的超參數更有意義。此外,它還引入了與收斂相關的網絡潛力,為架構搜索提供了一個很好的度量。

結論

探索深度學習理論的過程可以分為兩部分:首先,通過簡單的模型和實驗,建立起關于深度學習理論如何及其為什么起作用的認知,然后將這些理念以數學形式呈現,以幫助我們解釋當前的結論并得到新的結果。

在第一篇文章中,我們試圖傳達更多關于神經網絡高維損失函數和 SGD 解說的直觀認知,同時表明新的形式主義正在建立,目的是建立一個關于深層神經網絡優化的真正數學理論。

然而,雖然非凸優化是深度學習的基石并且擁有大量的層數和參數,但它取得的成功大部分源于其優秀的泛化能力。這將是下一篇文章將分享的內容。

Sanjeev Arora:印度裔美國理論計算機科學家,他以研究概率可檢驗證明,尤其是PCP定理而聞名。研究興趣包括計算復雜度理論、計算隨機性、概率可檢驗證明等。他于2018年2月被推選為美國國家科學院院士,目前是普林斯頓大學計算機科學系教授。

建議我學習哪個計算機語言呢?

VB就不用考慮,它初學編程很容易,但是VB對編程的限制很嚴重。而R語言不是程序編程語言,它好像和統計分析有關。

C語言是傳統的面向過程類語言,應用范圍已經比較少了。它完全可以有C++語言代替,C++就是在C語言基礎上增加的面向對象的技術,所以C++語言的圖書基本上前幾章節就是C語言的內容。也就是說你如果想寫C語言程序,完全可以用C++來寫。而C++與C#都是面向對象的語言,Java也是。

C#是微軟為了它自己的發展戰略在C++基礎上做了適當的修改而形成的語言,所以在書寫語法上C#與C++有很多東西很像,當然C#把C++語言中的指針去掉了,并且添加了一些非常時間的語法特征。C++或C語言對編譯器軟件沒有限制,對操作系統平臺也沒有限制。Windows有很多編譯器,在Linux平臺下可以使用gcc。

C#語言本身對平臺也沒有限制,但是目前好像只能用Microsoft Visual Studio編譯,而它生成的程序大多數只能在Windows上運行。當然它要與.Net Framework配套時間,在編寫Windows上,特別是有用戶界面的應用程序上要比C++或C語言容易多了。

C#語言也可以用ASP.NET的網站開發。.Net Framework為Windows操作系統上為了面向對象而提供的一種編程接口,傳統的叫Win32 API這是面向過程的,各種語言在使用Win32 API訪問操作系統資源時特別煩瑣,特別是編寫有用戶界面的程序。.Net Framework則簡化了這個問題,所有的事物都視為對象。操作系統中各種資源都是對象,這樣編程就容易了。不過現在有一個模仿.Net Framework的第三方庫mono,它可以實現用C#生成的應用程序在Linux上運行,但是mono并沒有完全實現.Net Framework,所以有些特定功能無法在Linux上運行。

當然未來你的程序主要面向Windows操作系統則無須在意這個。不過C#確實是一個非常好用的語言。如果你要面向Linux操作系統編程,那建議C++語言或C語言。需要說明C++語言不能直接使用.Net Framework。不過微軟為了C++能夠使用.Net Framework,對C++所了適當修改。形成了C++/CLI。只是對C++所了小幅度的調整,當然它保留了C++原來的語法特征。

不過市面上介紹.Net Framework的書都是用C#語言描述的,所以想用C++使用.Net Framework,則需要將C#使用方法適當的修改一下。建議你直接將C語言、C++語言以及C#語言都開了,包括Java。雖然是四種語言,但是你的學習量絕對不是四種語言之和,最多相當于兩種語言的學習量。因為C++語言的前幾章節就是C語言;C++語言中模板、STL等東西若弄不明白可以不學,最編程影響不到。C#語言去掉了C++和C語言中的最復雜的的指針的概念,適當的修改了C++語言的一些語法特征,主要是對象、類一些,并增加了一些語法特征。

Java語言也是面向對象的,對象、類等概念與C++和C#一樣,只是寫法稍微不同而已。就想“1”,中國叫它“一”,英國人叫它“one”。但是不管怎么叫,最終都是1。

以上就是關于編程做的漂移賽車游戲和目前世界上的計算機編程主要仍是英語的相關問題解答,希望對你有所幫助。