上一篇介紹了天才圖靈所做的時代背景,我們了解那個時代對于數(shù)學(xué)邏輯,可計算理論的發(fā)展。站在更大的時間和空間維度來看,我們看問題的角度會有更高的視角。
這篇我們來具體看下圖靈機(jī)到底是什么?
從上一篇文章我們知道圖靈機(jī)首次提出在圖靈的一篇論文《論數(shù)字計算在決斷難題中的應(yīng)用》中提出,原論文題目為《On Computable Numbers, with an Application to the Entscheidungsproblem》,英文好的同學(xué)可以從https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf 這個鏈接中查看原版的論文內(nèi)容。
一、圖靈機(jī)的組成
網(wǎng)上有一張經(jīng)典的圖片來表達(dá)圖靈機(jī)的構(gòu)成,圖如下:
這張圖片什么意思?這么一個簡單的機(jī)器/裝置怎么會所有電子計算機(jī)的理論模型?
相信大家看到這張圖后都有這樣的疑問,下面筆者帶來由淺入深去理解圖靈機(jī)的組成。
圖靈的基本思想是用機(jī)器來模擬人們用紙筆進(jìn)行數(shù)學(xué)運(yùn)算的過程,它運(yùn)算過程看作下列兩種簡單的動作:
- 在紙上寫上或擦除某個符號;
- 把注意力從紙的一個位置移動到另一個位置;
邏輯結(jié)構(gòu)上圖靈機(jī)有四個部分組成
- 一個無限長的存儲帶,帶子有一個個連續(xù)的存儲格子組成,每個格子可以存儲一個數(shù)字或符號
- 一個讀寫頭,讀寫頭可以在存儲帶上左右移動,并可以讀、修改存儲格上的數(shù)字或符號
- 內(nèi)部狀態(tài)存儲器,該存儲器可以記錄圖靈機(jī)的當(dāng)前狀態(tài),并且有一種特殊狀態(tài)為停機(jī)狀態(tài)
- 控制程序指令,指令可以根據(jù)當(dāng)前狀態(tài)以及當(dāng)前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作(左移還是右移),并改變狀態(tài)存儲器的值,令機(jī)器進(jìn)入一個新的狀態(tài)或保持狀態(tài)不變。
當(dāng)然這些只是理想的圖靈機(jī),因?yàn)楝F(xiàn)實(shí)中不存在無限長的存儲帶,更加圖靈的理論這樣的一臺裝置就能模擬人類所能進(jìn)行的任何計算過程。是不是很神奇?我相信你肯定不相信,不過圖靈是經(jīng)過嚴(yán)格的數(shù)學(xué)證明,下面我們來看看圖靈機(jī)的計算過程。
二、圖靈機(jī)的運(yùn)行機(jī)制
圖靈機(jī)工作步驟
- 準(zhǔn)備
- 存儲帶子上的格子初始話
- 設(shè)置內(nèi)部狀態(tài)存儲器當(dāng)前狀態(tài)
- 讀寫頭設(shè)置初始在存儲帶上所做的格子位置
- 準(zhǔn)備好控制指令,即控制程序。
- 反復(fù)執(zhí)行以下步驟,直到停機(jī)
- 讀寫頭讀出當(dāng)前格子的數(shù)字或符號
- 根據(jù)當(dāng)前狀態(tài)和讀到的字母或符號找到對應(yīng)的控制指令
- 根據(jù)控制指令,執(zhí)行以下三個動作
1. 讀寫頭在格子上擦除或?qū)懭胍粋€數(shù)字或符號
2. 變更狀態(tài)到一個新狀態(tài)
3. 讀寫頭向左或向右移動一格
估計你還是不明白,別急??催^《三體》的同學(xué)都知道三體人把地球人看做“蟲子”,三體人的維度比地球三維世界高,就好像我們?nèi)祟惏芽聪x子一樣。
下面,我們把蟲子放到一個二維的世界中,以蟲子為例,給大家來說明最簡單的圖靈機(jī)模型(注:該例子非原創(chuàng))。
假設(shè)理想的情況一:
-
蟲子所處的二維世界是一個無限長的紙帶,這個紙帶上被分成了若干小的方格,而每個方格都僅僅只有黑和白兩種顏色。紙帶的片段為:
蟲子所在二維紙帶.png 假設(shè)蟲子的感官只有眼睛,并且它的視力短的可憐,只能看到當(dāng)前所處格子的顏色
蟲子可以向前爬一個格子或向后爬一個格子
蟲子的操作系統(tǒng)、程序?yàn)椋何覀兗僭O(shè)黑色是食物區(qū),蟲子吃到食物后前移一格,白色是空白區(qū),沒有食物后退一格,
輸入 | 輸出 |
---|---|
黑色 | 前移一格 |
白色 | 后移一格 |
在這個情況中格子的顏色是蟲子的輸入信息,集合為IN={黑色,白色},輸出集合為 OUT= {前移一格,后移一格}
從開始位置開始,蟲子會怎么移動呢?
- 開始是黑色,蟲子前移一格,到達(dá)第2格
- 第2還是黑色,蟲子前移一格,到達(dá)第3格
- 第3格還是黑色,蟲子前移一格,到達(dá)第4格
- 第4格為白色,蟲子后移一格,回到第3格
- 可見,這條帶子上,蟲子在第4格和第3格來回移動循環(huán)不止。
假設(shè)理想的情況二
現(xiàn)實(shí)中蟲子肯定不可能傻到無線循環(huán),蟲子會有饑餓、吃飽的感受,食物吃了后也會消失。因此我們在情況下中改進(jìn)下模型。
- 蟲子在黑色的格子時,如果是饑餓狀態(tài),吃掉食物把格子變成白色;如果是吃飽狀態(tài),后移一格
- 蟲子在白色的格子時,如果是饑餓狀態(tài),停下來等食物長出來涂黑;如果是吃飽狀態(tài),前移一格
- 蟲子的操作系統(tǒng)、程序?yàn)椋?/li>
輸入 | 當(dāng)前狀態(tài) | 輸出 | 下一個狀態(tài) |
---|---|---|---|
黑色 | 吃飽 | 后移一格 | 饑餓 |
黑色 | 饑餓 | 吃完食物格子變白(不移動) | 吃飽 |
白色 | 吃飽 | 前移一格 | 饑餓 |
白色 | 饑餓 | 等待食物長出來涂黑(不移動) | 吃飽 |
在這種情況中,輸入集合為IN={黑色,白色},輸出集合為 OUT= {前移一格,后移一格,吃掉食物涂白,等待食物長出來涂黑},內(nèi)部狀態(tài)S={吃飽,饑餓}
二維紙帶不變,從開始位置開始,蟲子初始是饑餓狀態(tài),蟲子會怎么移動呢?
- 第1格是黑色,蟲子饑餓,吃掉食物格子變白,蟲子新狀態(tài)為吃飽
- 第1格為白色,蟲子吃飽,蟲子前移一格,到達(dá)第2格,蟲子新狀態(tài)為饑餓
- 第2格為黑色,蟲子饑餓,吃掉食物格子變白,蟲子新狀態(tài)為吃飽
- 第2格為白色,蟲子吃飽,蟲子前移一格,到達(dá)第3格,蟲子新狀態(tài)為饑餓
- 第3格為黑色,蟲子饑餓,吃掉食物格子變白,蟲子新狀態(tài)為吃飽
- 第3格為白色,蟲子吃飽,蟲子前移一格,到達(dá)第4格,蟲子新狀態(tài)為饑餓
- 第4格為白色,蟲子饑餓,等待食物長出來涂黑,蟲子新狀態(tài)為吃飽
- 第4格為黑色,蟲子吃飽,蟲子后退一格,到達(dá)第3格,蟲子新狀態(tài)為饑餓
- 這時,第3格已經(jīng)長出來食物,是黑色,因此流程和第5步的情況一樣了
情況二,小蟲的行為比情況以復(fù)雜了一些,但小蟲最后仍然會落入無限循環(huán)當(dāng)中。
到此,如果你已經(jīng)徹底搞懂了二維蟲子是怎么移動的,那么你已經(jīng)明白了圖靈機(jī)的工作原理了!因?yàn)閺谋举|(zhì)上講,最后的小蟲模型就是一個圖靈機(jī)!
三、如何理解圖靈機(jī)
剛才用二維蟲子說明了圖靈機(jī)的工作原理,相信你的第一個反映就是,這樣的模型太簡單了!
他根本說明不了現(xiàn)實(shí)世界中的任何問題!下面,我就要試圖說服你,圖靈機(jī)這個模型是偉大的!
其實(shí)蟲子的所有決策和行為都可以抽象成一個圖靈機(jī)模型。
為什么可以做這種抽象呢?
其實(shí)可以把二維蟲子的模型進(jìn)行更多擴(kuò)展,以和現(xiàn)實(shí)世界基本或完全一致。因?yàn)槎S蟲子模型是以一切都簡化的前提開始的,所以它的確是太太簡單了。
然而,我們可以把二維蟲子的輸入集合、輸出行動集合、內(nèi)部狀態(tài)集合進(jìn)行擴(kuò)大,這個模型就一下子實(shí)用多了。
- 二維蟲子完全可以處于一個三維的空間中而不是簡簡單單的紙帶。
- 二維蟲子的視力很好,它一下子能讀到方圓500米的信息。
- 二維蟲子也可以擁有其他的感覺器官,比如嗅覺、聽覺等等,而這些改變都僅僅是擴(kuò)大了輸入集合的維數(shù)和范圍,并沒有其他更本質(zhì)的改變。
- 二維蟲子可能的輸出集合也是異常的豐富,它不僅僅能移動自己,還可以盡情的改造它所在的自然界。
- 進(jìn)一步的,二維蟲子的內(nèi)部狀態(tài)可能非常的多,而且控制它行為的程序可能異常復(fù)雜
那么二維蟲子會有什么本事呢?這就很難說了,因?yàn)殡S著小蟲內(nèi)部的狀態(tài)數(shù)的增加,隨著它所處環(huán)境的復(fù)雜度的增加,我們正在逐漸失去對二維蟲子行為的預(yù)測能力。
但是所有這些改變?nèi)匀粵]有逃出圖靈機(jī)的模型:
"輸入集合、輸出集合、內(nèi)部狀態(tài)、固定的程序指令!"
就是這四樣?xùn)|西抓住了二維蟲子信息處理的根本。
四、 什么是圖靈完備
維基百科解釋:
可圖靈指在可計算性理論中,編程語言或任意其他的邏輯系統(tǒng)如具有等用于通用圖靈機(jī)的計算能力。換言之,此系統(tǒng)可與通用圖靈機(jī)互相模擬。
上面的解釋比較抽象,通過上面的例子理解了什么是圖靈機(jī),圖靈完備其實(shí)就很很簡單理解了。
簡單來說,能夠抽象成圖靈機(jī)的系統(tǒng)或編程語言就是圖靈完備的;一切可計算的問題圖靈機(jī)都能計算,因此滿足這樣要求的邏輯系統(tǒng)、裝置或者編程語言就叫圖靈完備的。
因此可見,二維蟲子是圖靈完備的。
Bitcoin的腳本由于沒有條件分支,循環(huán)等控制指令,回到上面的蟲子的例子,蟲子就不能根據(jù)當(dāng)前狀態(tài),判斷選擇移動還是吃食物等一系列的動作,因此不滿足圖靈機(jī)的模型,不是圖靈完備的。
五、人也是圖靈機(jī)?
我們?nèi)四懿荒芤脖贿@樣的抽象呢?顯然是可以的。
其實(shí)我們每一個會決策、會思考的人就可以被抽象的看成一個圖靈機(jī),也就是笑來老師一直說:每個人都有自己的操作系統(tǒng),因?yàn)橛性J(rèn)知能力,還可以自己升級操作系統(tǒng)。
輸入狀態(tài)集合就是你所處的環(huán)境中能夠看到、聽到、聞到、感覺到的所有一起,可能的輸出集合就是你的每一言每一行,以及你能夠表達(dá)出來的所有表情動作。內(nèi)部狀態(tài)集合則要復(fù)雜得多。因?yàn)槲覀兛梢园讶我庖粋€神經(jīng)細(xì)胞的狀態(tài)組合看作是一個內(nèi)部狀態(tài),那么所有可能的神經(jīng)細(xì)胞的狀態(tài)組合將是天文數(shù)字!這就是人類的記憶。只要圖靈機(jī)具有了內(nèi)部狀態(tài),它就相應(yīng)的具有了記憶。
這樣理解的話,還有兩個問題:
- 圖靈機(jī)的程序指令是固定的。但是人類有學(xué)習(xí)能力,也就是說人的大腦會進(jìn)化,操作系統(tǒng)會升級,所以大腦的實(shí)際程序規(guī)則是不固定,似乎圖靈機(jī)模型包含不了。
- 人類的很多現(xiàn)象似乎都能被圖靈機(jī)包括:情緒、情感等
這個問題,其實(shí)圖靈也已經(jīng)考慮過了,其實(shí)就是我們現(xiàn)在一個大熱門:AI,人工智能,計算機(jī)是否真的能實(shí)現(xiàn)人工智能。下一篇我們講和大家聊聊這個話題。