帶你深入理解圖靈機--什麼是圖靈機、圖靈完備
上一篇介紹了天才圖靈所做的時代背景,我們瞭解那個時代對於數學邏輯,可計算理論的發展。站在更大的時間和空間維度來看,我們看問題的角度會有更高的視角。
這篇我們來具體看下圖靈機到底是什麼?
從上一篇文章我們知道圖靈機首次提出在圖靈的一篇論文《論數字計算在決斷難題中的應用》中提出,原論文題目為《On Computable Numbers, with an Application to the Entscheidungsproblem》,英文好的同學可以從https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf 這個連結中檢視原版的論文內容。
一、圖靈機的組成
網上有一張經典的圖片來表達圖靈機的構成,圖如下:
這張圖片什麼意思?這麼一個簡單的機器/裝置怎麼會所有電子計算機的理論模型?
相信大家看到這張圖後都有這樣的疑問,下面筆者帶來由淺入深去理解圖靈機的組成。
圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程,它運算過程看作下列兩種簡單的動作:
- 在紙上寫上或擦除某個符號;
- 把注意力從紙的一個位置移動到另一個位置;
邏輯結構上圖靈機有四個部分組成
- 一個無限長的儲存帶,帶子有一個個連續的儲存格子組成,每個格子可以儲存一個數字或符號
- 一個讀寫頭,讀寫頭可以在儲存帶上左右移動,並可以讀、修改儲存格上的數字或符號
- 內部狀態儲存器,該儲存器可以記錄圖靈機的當前狀態,並且有一種特殊狀態為停機狀態
- 控制程式指令,指令可以根據當前狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作(左移還是右移),並改變狀態儲存器的值,令機器進入一個新的狀態或保持狀態不變。
當然這些只是理想的圖靈機,因為現實中不存在無限長的儲存帶,更加圖靈的理論這樣的一臺裝置就能模擬人類所能進行的任何計算過程。是不是很神奇?我相信你肯定不相信,不過圖靈是經過嚴格的數學證明,下面我們來看看圖靈機的計算過程。
二、圖靈機的執行機制
圖靈機工作步驟
- 準備
- 儲存帶子上的格子初始話
- 設定內部狀態儲存器當前狀態
- 讀寫頭設定初始在儲存帶上所做的格子位置
- 準備好控制指令,即控制程式。
- 反覆執行以下步驟,直到停機
- 讀寫頭讀出當前格子的數字或符號
- 根據當前狀態和讀到的字母或符號找到對應的控制指令
- 根據控制指令,執行以下三個動作
1. 讀寫頭在格子上擦除或寫入一個數字或符號
2. 變更狀態到一個新狀態
3. 讀寫頭向左或向右移動一格
估計你還是不明白,別急。看過《三體》的同學都知道三體人把地球人看做“蟲子”,三體人的維度比地球三維世界高,就好像我們人類把看蟲子一樣。
下面,我們把蟲子放到一個二維的世界中,以蟲子為例,給大家來說明最簡單的圖靈機模型(注:該例子非原創)。
假設理想的情況一:
-
蟲子所處的二維世界是一個無限長的紙帶,這個紙帶上被分成了若干小的方格,而每個方格都僅僅只有黑和白兩種顏色。紙帶的片段為:
假設蟲子的感官只有眼睛,並且它的視力短的可憐,只能看到當前所處格子的顏色
蟲子可以向前爬一個格子或向後爬一個格子
蟲子的作業系統、程式為:我們假設黑色是食物區,蟲子吃到食物後前移一格,白色是空白區,沒有食物後退一格,
輸入 | 輸出 |
---|---|
黑色 | 前移一格 |
白色 | 後移一格 |
在這個情況中格子的顏色是蟲子的輸入資訊,集合為IN={黑色,白色},輸出集合為 OUT= {前移一格,後移一格}
從開始位置開始,蟲子會怎麼移動呢?
- 開始是黑色,蟲子前移一格,到達第2格
- 第2還是黑色,蟲子前移一格,到達第3格
- 第3格還是黑色,蟲子前移一格,到達第4格
- 第4格為白色,蟲子後移一格,回到第3格
- 可見,這條帶子上,蟲子在第4格和第3格來回移動迴圈不止。
假設理想的情況二
現實中蟲子肯定不可能傻到無線迴圈,蟲子會有飢餓、吃飽的感受,食物吃了後也會消失。因此我們在情況下中改進下模型。
- 蟲子在黑色的格子時,如果是飢餓狀態,吃掉食物把格子變成白色;如果是吃飽狀態,後移一格
- 蟲子在白色的格子時,如果是飢餓狀態,停下來等食物長出來塗黑;如果是吃飽狀態,前移一格
- 蟲子的作業系統、程式為:
輸入 | 當前狀態 | 輸出 | 下一個狀態 |
---|---|---|---|
黑色 | 吃飽 | 後移一格 | 飢餓 |
黑色 | 飢餓 | 吃完食物格子變白(不移動) | 吃飽 |
白色 | 吃飽 | 前移一格 | 飢餓 |
白色 | 飢餓 | 等待食物長出來塗黑(不移動) | 吃飽 |
在這種情況中,輸入集合為IN={黑色,白色},輸出集合為 OUT= {前移一格,後移一格,吃掉食物塗白,等待食物長出來塗黑},內部狀態S={吃飽,飢餓}
二維紙帶不變,從開始位置開始,蟲子初始是飢餓狀態,蟲子會怎麼移動呢?
- 第1格是黑色,蟲子飢餓,吃掉食物格子變白,蟲子新狀態為吃飽
- 第1格為白色,蟲子吃飽,蟲子前移一格,到達第2格,蟲子新狀態為飢餓
- 第2格為黑色,蟲子飢餓,吃掉食物格子變白,蟲子新狀態為吃飽
- 第2格為白色,蟲子吃飽,蟲子前移一格,到達第3格,蟲子新狀態為飢餓
- 第3格為黑色,蟲子飢餓,吃掉食物格子變白,蟲子新狀態為吃飽
- 第3格為白色,蟲子吃飽,蟲子前移一格,到達第4格,蟲子新狀態為飢餓
- 第4格為白色,蟲子飢餓,等待食物長出來塗黑,蟲子新狀態為吃飽
- 第4格為黑色,蟲子吃飽,蟲子後退一格,到達第3格,蟲子新狀態為飢餓
- 這時,第3格已經長出來食物,是黑色,因此流程和第5步的情況一樣了
情況二,小蟲的行為比情況以複雜了一些,但小蟲最後仍然會落入無限迴圈當中。
到此,如果你已經徹底搞懂了二維蟲子是怎麼移動的,那麼你已經明白了圖靈機的工作原理了!因為從本質上講,最後的小蟲模型就是一個圖靈機!
三、如何理解圖靈機
剛才用二維蟲子說明了圖靈機的工作原理,相信你的第一個反映就是,這樣的模型太簡單了!
他根本說明不了現實世界中的任何問題!下面,我就要試圖說服你,圖靈機這個模型是偉大的!
其實蟲子的所有決策和行為都可以抽象成一個圖靈機模型。
為什麼可以做這種抽象呢?
其實可以把二維蟲子的模型進行更多擴充套件,以和現實世界基本或完全一致。因為二維蟲子模型是以一切都簡化的前提開始的,所以它的確是太太簡單了。
然而,我們可以把二維蟲子的輸入集合、輸出行動集合、內部狀態集合進行擴大,這個模型就一下子實用多了。
- 二維蟲子完全可以處於一個三維的空間中而不是簡簡單單的紙帶。
- 二維蟲子的視力很好,它一下子能讀到方圓500米的資訊。
- 二維蟲子也可以擁有其他的感覺器官,比如嗅覺、聽覺等等,而這些改變都僅僅是擴大了輸入集合的維數和範圍,並沒有其他更本質的改變。
- 二維蟲子可能的輸出集合也是異常的豐富,它不僅僅能移動自己,還可以盡情的改造它所在的自然界。
- 進一步的,二維蟲子的內部狀態可能非常的多,而且控制它行為的程式可能異常複雜
那麼二維蟲子會有什麼本事呢?這就很難說了,因為隨著小蟲內部的狀態數的增加,隨著它所處環境的複雜度的增加,我們正在逐漸失去對二維蟲子行為的預測能力。
但是所有這些改變仍然沒有逃出圖靈機的模型:
"輸入集合、輸出集合、內部狀態、固定的程式指令!"
就是這四樣東西抓住了二維蟲子資訊處理的根本。
四、 什麼是圖靈完備
維基百科解釋:
可圖靈指在可計算性理論中,程式語言或任意其他的邏輯系統如具有等用於通用圖靈機的計算能力。換言之,此係統可與通用圖靈機互相模擬。
上面的解釋比較抽象,通過上面的例子理解了什麼是圖靈機,圖靈完備其實就很很簡單理解了。
簡單來說,能夠抽象成圖靈機的系統或程式語言就是圖靈完備的;一切可計算的問題圖靈機都能計算,因此滿足這樣要求的邏輯系統、裝置或者程式語言就叫圖靈完備的。
因此可見,二維蟲子是圖靈完備的。
Bitcoin的指令碼由於沒有條件分支,迴圈等控制指令,回到上面的蟲子的例子,蟲子就不能根據當前狀態,判斷選擇移動還是吃食物等一系列的動作,因此不滿足圖靈機的模型,不是圖靈完備的。
五、人也是圖靈機?
我們人能不能也被這樣的抽象呢?顯然是可以的。
其實我們每一個會決策、會思考的人就可以被抽象的看成一個圖靈機,也就是笑來老師一直說:每個人都有自己的作業系統,因為有元認知能力,還可以自己升級作業系統。
輸入狀態集合就是你所處的環境中能夠看到、聽到、聞到、感覺到的所有一起,可能的輸出集合就是你的每一言每一行,以及你能夠表達出來的所有表情動作。內部狀態集合則要複雜得多。因為我們可以把任意一個神經細胞的狀態組合看作是一個內部狀態,那麼所有可能的神經細胞的狀態組合將是天文數字!這就是人類的記憶。只要圖靈機具有了內部狀態,它就相應的具有了記憶。
這樣理解的話,還有兩個問題:
- 圖靈機的程式指令是固定的。但是人類有學習能力,也就是說人的大腦會進化,作業系統會升級,所以大腦的實際程式規則是不固定,似乎圖靈機模型包含不了。
- 人類的很多現象似乎都能被圖靈機包括:情緒、情感等
這個問題,其實圖靈也已經考慮過了,其實就是我們現在一個大熱門:AI,人工智慧,計算機是否真的能實現人工智慧。下一篇我們講和大家聊聊這個話題。
**更多有關區塊鏈的技術與思維,可掃碼加入我的小密圈。在這裡,我陪著你,大家一起研究區塊鏈技術,探討區塊鏈思維,預測區塊鏈未來,一起做未來前10%的人
為感謝大家的支援,原價99元,現免費開放,可私信我,我拉你加入星球
**
相關文章
- 什麼是圖靈機(Turing Machine)? (轉)圖靈Mac
- 【計算理論】圖靈機 ( 多個帶子的圖靈機 | 計算能力對比 | 證明過程 | 一個帶子圖靈機 )圖靈
- 圖靈機真的是計算機嗎?圖靈計算機
- 我的貓圖靈完備嗎? - belaycpp圖靈
- 《圖靈的祕密》作者Charles Petzold:我眼中的圖靈機和Windows(圖靈訪談)圖靈Windows
- 2292 圖靈機遊戲圖靈遊戲
- 圖靈停機問題圖靈
- 來到圖靈,喜歡圖靈圖靈
- AI數學基礎之:確定圖靈機和非確定圖靈機AI圖靈
- 顧森講解圖靈機圖靈
- 圖靈機狀態轉移函式為什麼是部分函式?圖靈函式
- 圖靈機與計算理論圖靈
- 走近計算機大神:艾倫·圖靈計算機圖靈
- 圖靈社群圖靈
- 15 圖靈圖靈
- 圖靈機,你瞭解嗎?——剖析被譽為現代計算機原理開山之作的圖靈論文圖靈計算機
- 神經圖靈機深度講解:從圖靈機基本概念到可微分神經計算機圖靈計算機
- 【民間圖靈獎】讀《圖靈的祕密》寫讀後感獲圖靈水杯圖靈
- 圖靈機:萬物皆演算法?圖靈演算法
- 圖靈機器人 python 試玩圖靈機器人Python
- 圖靈成立七週年——圖靈教育,我,那些書圖靈
- 圖靈成立七週年——圖靈生日賀詞徵集圖靈
- 你好,圖靈社群!圖靈
- 圖靈的優惠圖靈
- 圖靈搬家啦!圖靈
- 圖靈社群bug圖靈
- 圖靈訪談圖靈
- 再見,圖靈圖靈
- 圖靈簡介圖靈
- 圖靈的故事圖靈
- 伴著圖靈夢想前行 -- 我和圖靈的故事圖靈
- 圖靈成立七週年——圖靈書與翻譯事圖靈
- 【圖靈成立七週年】我和圖靈的那些事圖靈
- 我的圖靈圖書列表圖靈
- Python 實現圖靈微信機器人Python圖靈機器人
- 曬曬你最喜愛的圖靈圖書圖靈
- 與圖靈的相遇圖靈
- 圖靈群徵文活動圖靈