前言
之前一直都是在學(xué)習(xí)Python與機(jī)器學(xué)習(xí)册踩,深度學(xué)習(xí)戚扳。但是究竟為什么在眾多的編程語言中選擇Python作為人工智能的首選語言呢我一直不得而知竿滨,今天就來以我的理解來梳理下吧队他。首先在我不再贅述Python的前世今生董瞻,只是深入的說一下Python與人工智能的關(guān)系寞蚌。
一田巴、從人工智能說起
首先人工智能話題的熱度再度升起應(yīng)該是開始于一個引發(fā)全民狂歡的科技新聞:2016年到2017年,谷歌開發(fā)的圍棋AI程序AlphaGo接連擊敗歐洲冠軍樊麾挟秤、韓國九段棋手李世石壹哺、世界圍棋冠軍柯潔,登頂?shù)厍蛑畮p艘刚。此時(shí)距離深藍(lán)在國際象棋中橫掃人類選手剛好20年管宵。幾個月后,AlphaGo的升級版化名AlphaGo Zero卷土重來攀甚,僅僅通過3天的自我訓(xùn)練就擊敗了已經(jīng)擊敗了李世石的AlphaGo Lee箩朴,經(jīng)過40天的訓(xùn)練,又輕描淡寫的擊敗了已經(jīng)擊敗了柯潔的AlphaGo Master秋度,沒有一點(diǎn)防備曲秉,也沒有一絲顧慮,圍棋這個被認(rèn)為是人類智慧遮羞布的領(lǐng)域就這樣被機(jī)器按在地上狠狠摩擦积担,這也就徹底引發(fā)了輿論的狂歡螟碎。這個時(shí)候,許多人說人工智能的時(shí)代又一次到來...
在上面所說的是人工智能在游戲領(lǐng)域的應(yīng)用鲸拥,其實(shí)人工智能的應(yīng)用還有很多拐格,比如計(jì)算機(jī)視覺、語音識別刑赶、無人駕駛捏浊、自然語言處理、推薦系統(tǒng)等撞叨,在接下來金踪,我們就重點(diǎn)講講我們本文的核心話題:Python為什么成為人工智能的首選語言吧。
二牵敷、Python成為人工智能的首選編程語言胡岔?
首先我們需要明白一點(diǎn),人工智能所有的核心算法枷餐,都是依賴C或者C++完成的靶瘸,這些算法跑起來非常復(fù)雜,屬于計(jì)算密集型任務(wù)毛肋,需要榨干硬件的每一分性能怨咪。而Python本身的性能只能說是可惜,Java的性能一直被人詬病润匙,Python比Java還要更下一層樓诗眨,如果一個人黑python,那么肯定是朝性能這個點(diǎn)狠揍孕讳。python在人工智能匠楚、深度學(xué)習(xí)等領(lǐng)域扮演的更多是一個工具人的角色巍膘,也就是發(fā)揮一個前端或者說“花瓶”的作用,Python雖然不快芋簿,但是它易學(xué)易用易推倒峡懈,你只需要拿Python做做可視化,調(diào)用下Api接口益咬,寫寫展示層的邏輯就完事了〈澹現(xiàn)在的人工智能還處于人工智障階段,快速搭建一個可以調(diào)用和迭代的原型比什么都重要幽告。一些專門搞科研和算法的牛人精力都不在編程語言上梅鹦,用python能以最低的學(xué)習(xí)成本快速上手。
為什么不學(xué)習(xí)其他的低成本的編程語言呢冗锁?
Python的前期優(yōu)勢巨大齐唆,尤其是和人工智能相關(guān)的數(shù)據(jù)分析領(lǐng)域,Python更是深耕多年冻河,早早占據(jù)了先機(jī)箍邮,像一些廣受歡迎的數(shù)據(jù)分析框架:Numpy、Pandas等都是出自python的手筆;
一些大型的互聯(lián)網(wǎng)公司叨叙,比如谷歌和FaceBook對Python也是十分的鐘愛锭弊,而這兩家公司都是走在人工智能前沿的先鋒,谷歌發(fā)布了深度學(xué)習(xí)框架TensorFlow擂错,F(xiàn)aceBook推出的機(jī)器學(xué)習(xí)庫PyTorch味滞,都將Python放在了扛把子的位置;
Python的學(xué)術(shù)圈和科研圈的滲透力度也遠(yuǎn)非其他語言可以相提并論,放著簡單易學(xué)庫多的Python不學(xué)钮呀,難道去學(xué)C++嘛剑鞍,博士也是人,柿子也挑軟的捏;
在美國爽醋,特朗普政府和奧巴馬政府也花費(fèi)大量金錢來推廣計(jì)算機(jī)教育;
打鐵還需自身硬蚁署,python語言也有其自己獨(dú)特的優(yōu)勢:
- Python的定位是“優(yōu)雅”、“明確”蚂四、“簡單”光戈,所以Python程序看上去總是簡單易懂,初學(xué)者學(xué)Python证杭,不但入門容易田度,而且將來深入下去,可以編寫那些非常非常復(fù)雜的程序解愤。
- 開發(fā)效率非常高,Python有非常強(qiáng)大的第三方庫乎莉,基本上你想通過計(jì)算機(jī)實(shí)現(xiàn)任何功能送讲,Python官方庫里都有相應(yīng)的模塊進(jìn)行支持奸笤,直接下載調(diào)用后,在基礎(chǔ)庫的基礎(chǔ)上再進(jìn)行開發(fā)哼鬓,大大降低開發(fā)周期监右,避免重復(fù)造輪子。
- 高級語言————當(dāng)你用Python語言編寫程序的時(shí)候异希,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)
- 可移植性————由于它的開源本質(zhì)健盒,Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性称簿,那么你的所有Python程序無需修改就幾乎可以在市場上所有的系統(tǒng)平臺上運(yùn)行
- 可擴(kuò)展性————如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開扣癣,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們憨降。
- 可嵌入性————你可以把Python嵌入你的C/C++程序父虑,從而向你的程序用戶提供腳本功能。
三授药、其他補(bǔ)充
Python在一些公司的應(yīng)用:
- 谷歌:Google App Engine 士嚎、code.google.com 、Google earth 悔叽、谷歌爬蟲莱衩、Google廣告等項(xiàng)目都在大量使用Python開發(fā)
- CIA: 美國中情局網(wǎng)站就是用Python開發(fā)的
- NASA: 美國航天局(NASA)大量使用Python進(jìn)行數(shù)據(jù)分析和運(yùn)算
- YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開發(fā)的
- Dropbox:美國最大的在線云存儲網(wǎng)站,全部用Python實(shí)現(xiàn)娇澎,每天網(wǎng)站處理10億個文件的上傳和下載
- Instagram:美國最大的圖片分享社交網(wǎng)站笨蚁,每天超過3千萬張照片被分享,全部用python開發(fā)
- Facebook:大量的基礎(chǔ)庫均通過Python實(shí)現(xiàn)的
- Redhat: 世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
- 豆瓣: 公司幾乎所有的業(yè)務(wù)均是通過Python開發(fā)的
- 知乎: 國內(nèi)最大的問答社區(qū)九火,通過Python開發(fā)(國外Quora)
- 春雨醫(yī)生:國內(nèi)知名的在線醫(yī)療網(wǎng)站是用Python開發(fā)的
除上面之外赚窃,還有搜狐、金山岔激、騰訊勒极、盛大、網(wǎng)易虑鼎、百度辱匿、阿里、淘寶 炫彩、土豆匾七、新浪、果殼等公司都在使用Python完成各種各樣的任務(wù)江兢。
Python的缺點(diǎn):
- 速度慢昨忆,Python 的運(yùn)行速度相比C語言確實(shí)慢很多,跟JAVA相比也要慢一些杉允,因此這也是很多所謂的大牛不屑于使用Python的主要原因邑贴,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下用戶是無法直接感知到的席里,必須借助測試工具才能體現(xiàn)出來,比如你用C運(yùn)一個程序花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10s,算是非陈<荩夸張了奖磁,但是你是無法直接通過肉眼感知的,因?yàn)橐粋€正常人所能感知的時(shí)間最小單位是0.15-0.4s左右繁疤,哈哈咖为。其實(shí)在大多數(shù)情況下Python已經(jīng)完全可以滿足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等稠腊,這種情況下躁染,當(dāng)然還是建議你用C去實(shí)現(xiàn)的。
- 代碼不能加密麻养,因?yàn)镻YTHON是解釋性語言褐啡,它的源碼都是以名文形式存放的,不過我不認(rèn)為這算是一個缺點(diǎn)鳖昌,如果你的項(xiàng)目要求源代碼必須是加密的备畦,那你一開始就不應(yīng)該用Python來去實(shí)現(xiàn)。
- 線程不能利用多CPU問題许昨,這是Python被人詬病最多的一個缺點(diǎn)懂盐,GIL即全局解釋器鎖(Global Interpreter Lock),是計(jì)算機(jī)程序設(shè)計(jì)語言解釋器用于同步線程的工具糕档,使得任何時(shí)刻僅有一個線程在執(zhí)行莉恼,Python的線程是操作系統(tǒng)的原生線程。在Linux上為pthread速那,在Windows上為Win thread俐银,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行。一個python解釋器進(jìn)程內(nèi)有一條主線程端仰,以及多條用戶程序的執(zhí)行線程捶惜。即使在多核CPU平臺上,由于GIL的存在荔烧,所以禁止多線程的并行執(zhí)行吱七。關(guān)于這個問題的折衷解決方法,我們在以后線程和進(jìn)程章節(jié)里再進(jìn)行詳細(xì)探討鹤竭。