[點(diǎn)晴永久免費(fèi)OA]為什么人工智能推薦用Python而不是Java、C++ ?
那時(shí)候我還是個(gè)小年輕,在組里吭哧吭哧用 C++ 寫特征工程,看隔壁組的“科學(xué)家”們幾行 Python代碼一跑,圖都畫出來了,心里那叫一個(gè)不平衡啊:憑啥???我們這性能優(yōu)化、內(nèi)存管理搞得死去活來,你們這幫搞“腳本”的,跑得又慢,還好意思叫自己是搞算法的? 后來干的活多了,帶的人也多了,才慢慢琢磨過味兒來。這事兒,你得從兩個(gè)角度看,一個(gè)是歷史進(jìn)程,一個(gè)是個(gè)人奮斗…啊呸,一個(gè)是“開發(fā)效率”和“運(yùn)行效率”的取舍。 先說結(jié)論:人工智能用 Python,恰恰是因?yàn)樗奥薄?/b> 你沒看錯(cuò)。這個(gè)“慢”,指的是 Python 本身的執(zhí)行速度慢,但它換來的是人的開發(fā)速度“快”。而在 AI 這個(gè)領(lǐng)域,絕大多數(shù)時(shí)候,人的時(shí)間比機(jī)器的時(shí)間值錢多了。 1. 你以為的“慢”,不是AI計(jì)算真正的瓶頸這是最大的一個(gè)誤區(qū)。大家覺得 Python 慢,是因?yàn)樗慕忉寛?zhí)行、動(dòng)態(tài)類型這些特性,做一個(gè)純粹的 for 循環(huán),那速度確實(shí)被 C++ 按在地上摩擦。 但問題是,在搞 AI 的時(shí)候,我們根本不會用純 Python 去做那些計(jì)算密集型的任務(wù)。 你以為你寫的是:
這行代碼背后,PyTorch或者 TensorFlow這些深度學(xué)習(xí)框架,早就“偷天換日”了。你的 Python 代碼,更像一個(gè)“指揮官”或者“遙控器”,它發(fā)號施令,說:“喂,那個(gè)誰(GPU),把這堆數(shù)據(jù)(Tensor),用那個(gè)叫’卷積’的方法,給我算 10 遍?!?/p> 真正干活的,是底層那些用 C++、CUDA(NVIDIA 的并行計(jì)算平臺)寫好的、被優(yōu)化到極致的計(jì)算庫。這些庫,比如英特爾的 MKL、NVIDIA 的 cuDNN,它們才是真正的主力。這些底層庫在執(zhí)行矩陣乘法、卷積這些運(yùn)算時(shí),那速度是“真·猛男”,快得飛起。 所以整個(gè)流程是這樣的:
看到了吧?Python 負(fù)責(zé)的是那個(gè)“搭架子”和“穿針引線”的活兒,最累最重的體力活,它早就外包給那些 C++ 和 CUDA 的“老哥”們了。你的 Python 代碼慢的那一點(diǎn)點(diǎn),跟底層計(jì)算的耗時(shí)比起來,簡直就是毛毛雨,完全可以忽略不計(jì)。 舉個(gè)實(shí)際工作中的例子:
幾年前我?guī)€(gè)項(xiàng)目,要做一個(gè)商品評論的情感分析。老板想很快看到一個(gè)原型,看看這個(gè)方向有沒有搞頭。 如果用 C++,我得先找個(gè)線性代數(shù)的庫,再找個(gè)分詞的庫,然后自己手?jǐn)]一個(gè)邏輯回歸或者 SVM,調(diào)試編譯,環(huán)境配置…一套下來,一個(gè)星期能跑出個(gè)能看的東西就不錯(cuò)了。老板的耐心早就沒了。 當(dāng)時(shí)我怎么做的?打開 Jupyter Notebook:
?這就是 Python 的威力。它讓你把 90% 的精力,都花在“算法思路”和“業(yè)務(wù)邏輯”上,而不是跟編譯器、內(nèi)存指針作斗爭。在商業(yè)世界里,“快”速驗(yàn)證想法,遠(yuǎn)比機(jī)器“快”速運(yùn)行重要得多。 2. 生態(tài),生態(tài),還是TMD生態(tài)!如果說底層調(diào)用 C++ 是 Python 在 AI 領(lǐng)域立足的“技術(shù)基礎(chǔ)”,那它無敵的生態(tài)就是它稱王稱霸的“群眾基礎(chǔ)”。 AI 的發(fā)展不是一蹴而就的。最早在學(xué)術(shù)圈,科學(xué)家們需要一個(gè)工具來做數(shù)值計(jì)算和數(shù)據(jù)分析。MATLAB 很牛,但它收費(fèi)啊,還死貴。這時(shí)候,免費(fèi)、開源、語法還簡單的 Python 冒頭了。 一個(gè)叫 Travis Oliphant 的哥們,覺得 Python 缺少一個(gè)強(qiáng)大的數(shù)值計(jì)算能力,于是在 2005 年搞出了 NumPy。這玩意兒是開天辟地的。它讓 Python 有了跟 MATLAB 叫板的底氣,提供了多維數(shù)組對象,以及操作這些數(shù)組的 C 語言底層函數(shù)庫。 有了 NumPy 這個(gè)地基,上面的高樓大廈就開始瘋狂地蓋:
這個(gè)生態(tài)已經(jīng)形成了一個(gè)巨大的網(wǎng)絡(luò)效應(yīng)。你遇到的任何問題,上 Stack Overflow 一搜,99% 都有人問過,而且大概率有 Python 的解決方案。你想實(shí)現(xiàn)的任何功能,上 PyPI(Python Package Index)一搜,八成已經(jīng)有現(xiàn)成的輪子了。 這種感覺就像什么呢?你本來只想開個(gè)小賣部,結(jié)果發(fā)現(xiàn)方圓五百里,從貨源、物流、收銀系統(tǒng)、到辦執(zhí)照的黃牛,全都只跟你說同一種方言(Python)。那你還會費(fèi)勁去學(xué)另一門語言,然后自己去建整個(gè)配套設(shè)施嗎?不會的,太累了。 3. “膠水語言”的哲學(xué)Python 有個(gè)外號叫“膠水語言”。這個(gè)外號不好聽,但特別貼切。它的任務(wù)就是把各種不同語言寫的高性能模塊,像膠水一樣粘合在一起,讓你能方便地調(diào)用。 你想想 AI 項(xiàng)目的流程:數(shù)據(jù)清洗(可能要連數(shù)據(jù)庫、讀寫文件)、特征工程、模型訓(xùn)練(調(diào)用 GPU)、模型部署(可能要打包成一個(gè) web 服務(wù))。這里面每個(gè)環(huán)節(jié),Python 都有現(xiàn)成的、最好用的庫。它可以輕松地跟文件系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫、C++ 庫對話。 這種“萬金油”的特性,讓它成為了貫穿整個(gè) AI 工作流的最佳選擇。 所以,別再糾結(jié) Python 的“慢”了。它是一種取舍,一種智慧。它犧牲了自己那點(diǎn)微不足道的原生運(yùn)行速度,換來了整個(gè) AI 行業(yè)的研發(fā)效率的大幅提升。 對于想入行的新人來說,我的建議是:踏踏實(shí)實(shí)學(xué)好 Python,用好 Pandas、NumPy、Scikit-learn、PyTorch/TensorFlow 這些庫,你就能解決 99% 的問題了。等你成了大神,需要去優(yōu)化底層算子、手寫 CUDA kernel 的時(shí)候,你自然會去學(xué) C++。但對絕大多數(shù)人來說,Python 就是通往人工智能世界最好走的那座橋。 先學(xué)會開車,再關(guān)心發(fā)動(dòng)機(jī)是怎么造的。 閱讀原文:原文鏈接 該文章在 2025/8/5 13:12:21 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |