都在提的人工智能,其中的算法是什麼?其實高中的知識就有

我們高中數學為什麼不重視算法?高中學的數列,三角函數,求導,圓錐曲線相關問題的解法和算法有什麼關係?

都在提的人工智能,其中的算法是什麼?其實高中的知識就有

invalid s

開宗明義:算法不是什麼高級知識,它是初中甚至小學就可以掌握的東西。只不過,應試教育通過持續十年的努力,把你理解算法的能力剝奪了而已。

說白了,算法就是“利用自然/數學規律達到我們預定目的”的思路。

要學會這個思路,其實不難。

比如,我們知道,電流通過電阻會發熱;那麼,當我們需要煮飯時,是不是可以通過選取一個合適的電阻,利用它的熱量呢?

然後,細化問題:當我們要利用220v電壓,得到2000瓦的煮飯功率時,該如何選擇電阻呢?電阻本身會不會被燒壞?我們怎麼避免它被燒壞?

繼續細化:2000瓦的發熱功率,要避免溫度無限堆積,我們需要選擇一個合適的散熱效率;牛頓散熱公式很好找,然後我們知道溫度差越大散熱越快,因此溫度不可能無限提升。

繼續:假設燒飯用的電熱絲最佳溫度是500~800度,我們怎麼湊得這個值呢?

還能再進一步:我們是不是可以放個溫度計在鍋的支撐點/接觸面上,當鍋被燒乾時自動斷電呢?

繼續拆分這個目標:雙金屬片、熱電偶、磁體的居里點等等,都可以代替溫度計,從而使得溫度探測裝置結構更簡單、實現更便宜同時又更耐用。

你看,電爐、電飯煲等等“算法”,已經呼之欲出了。

再如,我們知道氣體受熱膨脹;燃料燃燒產生大量熱;我們知道槓桿、輪軸原理……

那麼,能不能組合這些東西,得到……內燃機呢?

細化:我們需要一個氣缸,讓燃料在裡面燃燒;然後需要一個大小合適的活塞,利用燃燒後的高溫高壓氣體推它;我們需要曲柄、連桿,把活塞的往復運動變成旋轉……

困難:等等,這樣只能推一下!

解決:加一個飛輪,利用它的慣性儲能;然後藉助飛輪儲存的動能,控制氣缸上面氣閥的開閉;再借助齒數比以及凸輪,使得氣缸上面的氣閥在合適的地方動作——從而形成“進氣、壓縮、做功、排氣”四個衝程。

困難:怎麼在合適的時機添加合適的燃料?怎麼使其燃燒?

解決:噴油嘴、霧化器、火花塞(柴油機還可壓燃)……同樣使用凸輪控制,使其恰到好處的動作……

你看,四衝程內燃機“算法”就設計出來了。

繼續,收音機,電視機……繼電器,邏輯門,加法器……只要你稍有了解便會發現,它們統統是這個思路。

什麼思路呢?

1、提出一個大而籠統的問題

2、把大而籠統的問題清晰化,然後拆分成一堆較小、較清晰、較容易解決的問題

3、解決每一個小問題

4、組合一大堆小問題的解決方案,組合得到大問題的解決方案

換句話說,解決實際問題並不是一問一答,套個合適公式就能完事的——凡這樣想的,才是不折不扣的反智。

恰恰相反,實際問題總是含糊的,有時候連個大方向都不會有。

領導/老闆絕不會對你說,為了解決人民群眾的做飯需要,請你算一算220v電作用於100歐的電阻,產生的熱功率是多少。

對不起,他們往往是外行,壓根不可能把問題問到這個程度;而且問到這個程度哪夠!你找個收音機用的糯米粒一樣的100歐電阻試試,看看它能不能扛一秒。那麼,適合做飯需要的電阻應該長什麼樣子,你能把這個需求清晰的提出來嗎

都在提的人工智能,其中的算法是什麼?其實高中的知識就有

哪怕他們是內行,讓你發明掃地機,也絕不會讓你算電阻發熱量——有提這種問題的功夫,他們自己就算出來了。

他們需要的,是你綜合利用自己掌握的知識,替他們考慮好需要注意需要解決的一切一切,並且解決它

因此,你得綜合自己的知識,自己學著提出問題。

任務:做個利用電做飯的鍋,儘可能自動、智能

你暈不暈?但這才是實踐問題。這才是實際生活中、工廠裡,老闆/領導真正會提的問題。

要解決這類問題,你得反過來,自己給自己提問題。

第一個問題,用電做飯是什麼原理;第二個問題,我得考慮哪些方面,才能讓用戶可以安全使用;第三個問題,我得如何設計操作界面,才能讓用戶覺得它易用甚至智能;第四個問題,我怎麼實現它們;第五個問題,如何證明我的方案可行、還有沒有更好的方案;第六個問題,如何壓縮成本……

通過問自己問題,幫自己把目標清晰化、幫自己尋找解決問題的步驟、幫自己設計解決問題的方案、幫自己證明解決方案的可行性/經濟性、幫自己尋找簡化方案/更優方案……你看,有無窮無盡的事情要做。

計算機算法也是類似的東西。它要求我們靈活運用我們掌握的知識,湊出我們需要的結果來。

比如說,識別圖像邊緣,這得怎麼做?

首先,問自己一個問題:什麼是圖像邊緣(請儘量用數學語言回答,做不到就得多鍛鍊)

然後,繼續問:我這個回答可靠嗎?會不會像“柏拉圖的人”一樣,被人用“拔毛雞”矇混過關?如果遇到這種情況,怎麼辦?還是隻能忍受?

最後,如何用計算機語言實現我的想法?

你看,學會問問題,學會把模糊的目標清晰化、數學化,算法的問題就解決了一半。

另一半是,尋找一條路,解決這種在未經訓練者看來壓根就無法回答的問題——這一半的難度,往往比“提出問題”又大了無數倍。

為了解決這類問題,你必須創造性的使用你掌握的知識。

熱電偶受熱產生電壓?那麼搭配上電壓表它就是溫度計。

石英受壓產生電壓?那麼把它做成薄膜、當它隨著聲波顫動時,其上的電壓必然反映了聲波波形——不夠完美?那是因為共振、分割震動等等問題造成的,我可以如此如此的建模從而使其可計算;然後如此如此的修改方案,以便影響其中的某個參數,從而得到完美的波形。

信號電壓太過微弱?有很多很多種物理過程,可以把微弱的輸入按比例放大。比如油門線上施加的微小的力和發動機輸出的強勁功率之間的關係。

我需要尋找數學/物理原理類似的過程。這玩意兒往往並不是天然存在的,但我可以利用現象A和現象B,然後如此組合它——看,三極管出現了!

類似的,我們需要讓雜亂無章的一堆數字有序,怎麼辦?

很簡單,我們都見過水和油的分層現象。它們為何會分層?遵循怎樣的物理規律?我如何提取其中的核心部分、儘量簡化我的實現?

冒泡算法呼之欲出。

先學會提問題,再學會創造性的解決問題;最後,把創造性的解決方案拆分、實現——這就是算法。

很明顯,提問題和解決問題並沒有明顯的界限。你必須融會貫通它。這需要持久、刻苦的訓練——哪怕是香農,他也沒可能一步到位的搞出哈夫曼編碼算法。

必須在這兩個方面足夠訓練有素,你才可能理解香農的偉大。

絕大部分比較難的算法已經被人解決了。我們可以學習他們的解決思路,然後解決實踐中遇到的那些更為簡單但並不能直接套公式的問題。

如果你曾經嘗試過去想“為什麼歐幾里得會弄出幾何學”“為什麼某某定理可以這樣證”“為什麼他們就能想到這樣去證”,那麼提問題和解決問題的一般思路就學到手了——如果你這樣學,那麼初高中學到的每一個知識點,都在教你如何解決問題、如何設計算法(所有“按步驟處理即可解決問題”的步驟的設計,都是廣義的算法)。

都在提的人工智能,其中的算法是什麼?其實高中的知識就有

換句話說,你需要鍛鍊自己主動的提出問題、尋找解決問題的途徑能力,而不是被動的記憶“套公式解決能套公式解決的問題的方法”。

但是,國內的應試教育以做題為目的。

學了輪軸?看,這道題要用到輪軸,我們要這樣套公式;那道題是另一種題型,套公式得那樣套——總結:關於輪軸的題型一共X種,它們的解法分別是#*&¥%#*……

久而久之,你們就只會背公式套公式了——你說手電筒?那玩意兒那麼複雜書上沒說我怎麼可能知道!

絕大多數人,最終都學的不僅不會問問題,更不會解決問題。他們只是會套公式而已。

當手電筒都能難住你時,哈夫曼?差著十萬八千里呢。這不是拿世界級難題難小學生嗎。

手電筒真的不是個比喻。

很多人的確沒有能力理解這種最淺最直接的知識:代碼是如何控制硬件的?

你看,“老鼠夾子抓老鼠不是老鼠夾子有智能,而是我們自己想辦法組合了槓桿、彈簧等東西,使得它可以在小動物碰觸時動作”這個幼兒園小朋友都能懂的原理他們懂嗎?懂了還會契而不捨的不斷追問“計算機究竟是怎麼認識0和1”嗎?

這種程度的換位思考/反向思考都辦不到,還能指望他們“自發尋找日常問題的解決方案”嗎?還可能指望他們解決別的“日常動腦”的人也需要思考片刻的“難”題嗎?

但是,哪怕只是當一個稍微不那麼尸位素餐的、中小企業的底層領工者/技術員,完全不會動腦子,可能嗎?

總結起來就一句話:算法很簡單,中小學甚至大字不識的人都能學會;它只是要求你自己動腦子、創造性的使用你學到的知識而已。

創造性幾乎是人類這個物種與生俱來的,沒人知道該如何教會別人;但壓抑它、剝奪它,卻並不難。

相關推薦

推薦中...