Python為什麼成為人工智慧的首選語言

  • 2020 年 3 月 13 日
  • 筆記

前言

之前一直都是在學習Python與機器學習,深度學習。但是究竟為什麼在眾多的程式語言中選擇Python作為人工智慧的首選語言呢我一直不得而知,今天就來以我的理解來梳理下吧。首先在我不再贅述Python的前世今生,只是深入的說一下Python與人工智慧的關係。

一、從人工智慧說起

首先人工智慧話題的熱度再度升起應該是開始於一個引發全民狂歡的科技新聞:2016年到2017年,Google開發的圍棋AI程式AlphaGo接連擊敗歐洲冠軍樊麾、韓國九段棋手李世石、世界圍棋冠軍柯潔,登頂地球之巔。此時距離深藍在國際象棋中橫掃人類選手剛好20年。幾個月後,AlphaGo的升級版化名AlphaGo Zero捲土重來,僅僅通過3天的自我訓練就擊敗了已經擊敗了李世石的AlphaGo Lee,經過40天的訓練,又輕描淡寫的擊敗了已經擊敗了柯潔的AlphaGo Master,沒有一點防備,也沒有一絲顧慮,圍棋這個被認為是人類智慧遮羞布的領域就這樣被機器按在地上狠狠摩擦,這也就徹底引發了輿論的狂歡。這個時候,許多人說人工智慧的時代又一次到來…

在上面所說的是人工智慧在遊戲領域的應用,其實人工智慧的應用還有很多,比如電腦視覺、語音識別、無人駕駛、自然語言處理、推薦系統等,在接下來,我們就重點講講我們本文的核心話題:Python為什麼成為人工智慧的首選語言吧

二、Python成為人工智慧的首選程式語言?

首先我們需要明白一點,人工智慧所有的核心演算法,都是依賴C或者C++完成的,這些演算法跑起來非常複雜,屬於計算密集型任務,需要榨乾硬體的每一分性能。而Python本身的性能只能說是可惜,Java的性能一直被人詬病,Python比Java還要更下一層樓,如果一個人黑python,那麼肯定是朝性能這個點狠揍。python在人工智慧、深度學習等領域扮演的更多是一個工具人的角色,也就是發揮一個前端或者說「花瓶」的作用,Python雖然不快,但是它易學易用易推倒,你只需要拿Python做做可視化,調用下Api介面,寫寫展示層的邏輯就完事了。現在的人工智慧還處於人工智障階段,快速搭建一個可以調用和迭代的原型比什麼都重要。一些專門搞科研和演算法的牛人精力都不在程式語言上,用python能以最低的學習成本快速上手。

為什麼不學習其他的低成本的程式語言呢?

  1. Python的前期優勢巨大,尤其是和人工智慧相關的數據分析領域,Python更是深耕多年,早早佔據了先機,像一些廣受歡迎的數據分析框架:Numpy、Pandas等都是出自python的手筆;
  2. 一些大型的互聯網公司,比如Google和FaceBook對Python也是十分的鐘愛,而這兩家公司都是走在人工智慧前沿的先鋒,Google發布了深度學習框架TensorFlow,FaceBook推出的機器學習庫PyTorch,都將Python放在了扛把子的位置;
  3. Python的學術圈和科研圈的滲透力度也遠非其他語言可以相提並論,放著簡單易學庫多的Python不學,難道去學C++嘛,博士也是人,柿子也挑軟的捏;
  4. 在美國,川普政府和奧巴馬政府也花費大量金錢來推廣電腦教育;
  5. 打鐵還需自身硬,python語言也有其自己獨特的優勢:

Python的定位是「優雅」、「明確」、「簡單」,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫里都有相應的模組進行支援,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重複造輪子。 高級語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節 可移植性————由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工 作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平台上運行 可擴展性————如果你需要你的一段關鍵程式碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能。

三、其他補充

Python在一些公司的應用

  • Google:Google App Engine 、code.google.com 、Google earth 、Google爬蟲、Google廣告等項目都在大量使用Python開發
  • CIA: 美國中情局網站就是用Python開發的
  • NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
  • YouTube:世界上最大的影片網站YouTube就是用Python開發的
  • Dropbox:美國最大的在線雲存儲網站,全部用Python實現,每天網站處理10億個文件的上傳和下載
  • Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
  • Facebook:大量的基礎庫均通過Python實現的
  • Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
  • 豆瓣: 公司幾乎所有的業務均是通過Python開發的
  • 知乎: 中國最大的問答社區,通過Python開發(國外Quora)
  • 春雨醫生:中國知名的在線醫療網站是用Python開發的

除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。

Python的缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程式花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10s,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種情況下,當然還是建議你用C去實現的。
  2. 程式碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源程式碼必須是加密的,那你一開始就不應該用Python來去實現。
  3. 執行緒不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是電腦程式設計語言解釋器用於同步執行緒的工具,使得任何時刻僅有一個執行緒在執行,Python的執行緒是作業系統的原生執行緒。在Linux上為pthread,在Windows上為Win thread,完全由作業系統調度執行緒的執行。一個python解釋器進程內有一條主執行緒,以及多條用戶程式的執行執行緒。即使在多核CPU平台上,由於GIL的存在,所以禁止多執行緒的並行執行。關於這個問題的折衷解決方法,我們在以後執行緒和進程章節里再進行詳細探討。