一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

(一)利用人工智能編寫(xiě)自進(jìn)化程序

 美康書(shū)齋 2021-11-24

英特爾實(shí)驗(yàn)室的兩位研究人員,利用遺傳算法和圖靈完備語(yǔ)言,號(hào)稱實(shí)現(xiàn)了首個(gè)能夠自動(dòng)編程的AI系統(tǒng)“AI Programmer”。文章共三篇,以下是網(wǎng)絡(luò)翻譯的詳細(xì)內(nèi)容:

介紹

計(jì)算機(jī)程序有可能自己編寫(xiě)程序嗎?人類的軟件開(kāi)發(fā)者有一天會(huì)被他們掌握的電腦所取代嗎?就像農(nóng)民、裝配線工人和電話接線員一樣,下一個(gè)會(huì)是軟件開(kāi)發(fā)人員嗎?雖然這種想法看起來(lái)有些牽強(qiáng),但實(shí)際上可能比我們想象的更接近。本文描述了一個(gè)實(shí)驗(yàn),以產(chǎn)生一個(gè)人工智能程序,能夠開(kāi)發(fā)自己的程序,使用遺傳算法實(shí)現(xiàn)自我修改和自我改進(jìn)的代碼。


image.png

“hello”
上面的編程代碼是由一個(gè)人工智能程序創(chuàng)建的,設(shè)計(jì)用來(lái)編寫(xiě)具有自我修改和自我改進(jìn)代碼的程序。程序在29分鐘內(nèi)生成了上述結(jié)果。編程語(yǔ)言是腦殘的。為什么是這種編程語(yǔ)言?繼續(xù)讀下去。
所有人工智能程序的代碼都可以在GitHub上找到。

人工智能寫(xiě)代碼

近年來(lái),隨著計(jì)算機(jī)技術(shù)、硬件、內(nèi)存和CPU速度的進(jìn)步,人工智能一直在穩(wěn)步發(fā)展。隨著計(jì)算機(jī)速度的提高,可以進(jìn)行更多的計(jì)算,從而提高許多人工智能算法所需的計(jì)算密集型處理能力。

人工智能愛(ài)好

這對(duì)我來(lái)說(shuō)有點(diǎn)像是一種愛(ài)好,我涉獵人工智能程序,試圖編寫(xiě)一個(gè)本身就可以編寫(xiě)程序的程序。當(dāng)然,我并不是指那些將程序指令或代碼塊的子集組合在一起或以其他方式優(yōu)化以產(chǎn)生最終結(jié)果的程序。我指的是從頭開(kāi)始,人工智能完全不知道如何用目標(biāo)語(yǔ)言編程。人工智能必須自己學(xué)習(xí)如何為特定目的創(chuàng)建一個(gè)功能完備的程序。

我最初是在20世紀(jì)90年代末開(kāi)始這項(xiàng)冒險(xiǎn)的,當(dāng)時(shí)我試圖用簡(jiǎn)單的if/then/else語(yǔ)句創(chuàng)建程序,用BASIC編程語(yǔ)言輸出程序。這是一項(xiàng)艱巨的任務(wù),原因很多。首先,使用if/then/else條件來(lái)編寫(xiě)隨機(jī)程序似乎一點(diǎn)也不聰明。第二,BASIC中可用的計(jì)算機(jī)指令太多了。更麻煩的是,有些指令非常危險(xiǎn)(Shell(“format c:”)!我還嘗試用C、C++和其他幾種語(yǔ)言生成程序。然而,這種天真的方法從來(lái)沒(méi)有產(chǎn)生一個(gè)工作的孩子計(jì)劃。盡管這不僅僅是因?yàn)槭褂煤?jiǎn)單的if/then/else語(yǔ)句,還因?yàn)樗x的編程語(yǔ)言是為了供人類使用而不是計(jì)算機(jī),因此,對(duì)于人工智能來(lái)說(shuō),自動(dòng)化要復(fù)雜得多。

雖然最終的目標(biāo)是產(chǎn)生一個(gè)能夠編寫(xiě)自己的文字處理軟件、圖像編輯工具、網(wǎng)絡(luò)瀏覽器或磁盤(pán)碎片整理程序的計(jì)算機(jī)程序,但我更感興趣的是一個(gè)簡(jiǎn)單的概念證明,證明這個(gè)想法是可能的。

足夠多的猴子和破打字機(jī)

我最初的動(dòng)機(jī)來(lái)自于【無(wú)限猴子】定理,它說(shuō)如果你有1000多只猴子在打字機(jī)上敲打足夠長(zhǎng)的時(shí)間,它們最終會(huì)重演莎士比亞寫(xiě)的劇本。這聽(tīng)起來(lái)很荒謬,但如果有足夠的時(shí)間,猴子們最終肯定會(huì)碰到“一些”隨機(jī)的字符序列,最終產(chǎn)生書(shū)面作品。簡(jiǎn)化這個(gè)想法,其中一只猴子肯定會(huì)在鍵盤(pán)的敲擊聲中敲出莎士比亞戲劇的第一個(gè)字母;這當(dāng)然是可能的。
如果你能引導(dǎo)猴子呢?每次一只猴子按正確的順序按正確的鍵,你就用香蕉獎(jiǎng)勵(lì)他?經(jīng)過(guò)足夠長(zhǎng)的時(shí)間,也許猴子會(huì)開(kāi)始發(fā)現(xiàn)一個(gè)模式?如果他真的很犀利,也許他甚至?xí)_(kāi)始學(xué)習(xí)英語(yǔ)中哪些字母通常一起組成單詞,從而比同齡人利用更多的香蕉。

關(guān)于遺傳算法的切線

這是遺傳算法的基本思想。遺傳算法是一種模仿生物進(jìn)化的人工智能,除了可用的工具和有效的指令外,它一開(kāi)始對(duì)這個(gè)學(xué)科一無(wú)所知。人工智能隨機(jī)挑選一系列指令(作為一段DNA)并檢查結(jié)果的適用性。它是在人口眾多的情況下完成的,比如說(shuō)100個(gè)項(xiàng)目。當(dāng)然,有些節(jié)目比其他節(jié)目好。那些身體最健康的人被交配在一起產(chǎn)生后代。每一代人都從輪盤(pán)賭選擇、交叉和變異等進(jìn)化技術(shù)中獲得了一點(diǎn)額外的多樣性。每個(gè)子代都會(huì)重復(fù)這個(gè)過(guò)程,希望產(chǎn)生越來(lái)越好的結(jié)果,直到找到目標(biāo)解決方案。遺傳算法是適者生存的編程實(shí)現(xiàn)。他們也可以被歸類為人工智能搜索算法,就他們?nèi)绾嗡阉饕粋€(gè)巨大的問(wèn)題空間的具體解決方案。

好,但是為什么選擇brainf ck呢?

雖然使用BASIC、C、C++和其他語(yǔ)言的原始實(shí)驗(yàn)未能產(chǎn)生結(jié)果,但我能夠成功地通過(guò)將一個(gè)自組織的編程語(yǔ)言(包括加法、減法、循環(huán)等)與遺傳算法和神經(jīng)網(wǎng)絡(luò)結(jié)合來(lái)生成人工智能編寫(xiě)的程序。雖然這很有趣,但最終的結(jié)果是簡(jiǎn)單的數(shù)學(xué)計(jì)算和編程語(yǔ)言本身,是未知的,并且對(duì)它最終能產(chǎn)生什么有嚴(yán)重的限制。
我開(kāi)始尋找一種簡(jiǎn)單的編程語(yǔ)言,指令數(shù)量有限,可以訓(xùn)練人工智能程序使用。匯編(ASM)很接近,但仍然包含了太多的排列。雖然聽(tīng)起來(lái)很幽默,但我最終還是嘗試了brainf ck,并最終成功地生成了上面顯示的代碼。
雖然brainf ck被設(shè)計(jì)成一種笑話編程語(yǔ)言,但由于人類使用它有多困難,它實(shí)際上對(duì)計(jì)算機(jī)有幾個(gè)明顯的優(yōu)勢(shì)。

Brainf ck作為人工智能編程語(yǔ)言的優(yōu)勢(shì)

1。它是圖靈完備的
圖靈完全編程語(yǔ)言意味著它在理論上能夠解決宇宙中的任何計(jì)算問(wèn)題。一種具有這種能力的編程語(yǔ)言提供了大量的可能性。畢竟,大多數(shù)(如果不是所有的話)計(jì)算機(jī)程序的設(shè)計(jì)都是為了執(zhí)行某種計(jì)算并以某種方式輸出結(jié)果。
2。它只由一組簡(jiǎn)化的8條指令組成
簡(jiǎn)化的指令集減少了可以找到目標(biāo)程序代碼的搜索空間。隨著計(jì)算機(jī)越來(lái)越快,可以搜索更大的問(wèn)題空間。然而,在個(gè)人計(jì)算機(jī)上,搜索空間需要受到限制。通過(guò)將編程指令集限制為8個(gè)不同的字符,AI可以更快地運(yùn)行,并在合理的時(shí)間內(nèi)(即,分鐘、小時(shí),甚至可能是一天)獲得最佳適應(yīng)度分?jǐn)?shù)。
3。建立一個(gè)解釋器很容易
指令集有很好的文檔記錄,易于理解。因此,創(chuàng)建一個(gè)可以執(zhí)行程序的簡(jiǎn)單解釋器非常簡(jiǎn)單。通過(guò)將解釋器包含在AI程序+遺傳算法本身中,代碼可以優(yōu)化為比調(diào)用外部編譯器來(lái)執(zhí)行每個(gè)子程序快得多。這也提供了安全約束,因?yàn)樽映绦蚴窃谌斯ぶ悄艹绦虻氖芸丨h(huán)境中運(yùn)行的。AI還可以訪問(wèn)解釋器的內(nèi)部組件,例如內(nèi)存、指令和輸出。這在計(jì)算健康評(píng)分時(shí)很有用。然而,使用第三方編譯器,這些組件將更難訪問(wèn)。
4。每條指令為1字節(jié)
本文中使用的人工智能程序是在C#.NET中設(shè)計(jì)的,它使用一個(gè)雙倍數(shù)組作為基因組?;蚪M中的每個(gè)double(基因)對(duì)應(yīng)于編程語(yǔ)言中的一條指令。因?yàn)槊織l指令只有1個(gè)字節(jié),所以很容易將每個(gè)基因映射到一個(gè)編程代碼(注意,1 double=8字節(jié);仍然相當(dāng)于數(shù)組中的一個(gè)插槽)。
5。存在擴(kuò)展指令的可能性
大多數(shù)編程語(yǔ)言的解釋器只是執(zhí)行代碼,維護(hù)內(nèi)存值,并支持控制臺(tái)輸入/輸出。但是,可以擴(kuò)展解釋器以包括對(duì)生成圖形、網(wǎng)絡(luò)功能、文件系統(tǒng)訪問(wèn)等的支持。想想你能給人工智能開(kāi)發(fā)自己程序的能力吧!;)

工作原理

人工智能程序的工作原理如下:
1 一個(gè)基因組由一系列雙倍體組成。
2 每個(gè)基因?qū)?yīng)于brainf ck編程語(yǔ)言中的一條指令。
3 從一群隨機(jī)的基因組開(kāi)始。
4 通過(guò)將每個(gè)double轉(zhuǎn)換成相應(yīng)的指令并執(zhí)行程序,將每個(gè)基因組解碼成結(jié)果程序。
5 根據(jù)每個(gè)程序?qū)懭肟刂婆_(tái)的輸出(如果有),獲取每個(gè)程序的適應(yīng)度得分,并對(duì)它們進(jìn)行排序。
6 使用輪盤(pán)賭選擇、交叉和變異將最好的基因組配對(duì),產(chǎn)生新一代。
7 對(duì)新一代重復(fù)此過(guò)程,直到達(dá)到目標(biāo)適應(yīng)度分?jǐn)?shù)。

由于適應(yīng)度方法fitness是計(jì)算成本最高的部分(它必須為人口中的每個(gè)成員執(zhí)行程序代碼,這可能包括無(wú)限循環(huán)和其他討厭的東西),人工智能程序使用Parallel.ForEach方法,可在.NET4.5中找到。以這種方式,它可以在每一代對(duì)群體中的多個(gè)基因組執(zhí)行多個(gè)適應(yīng)度算法。這允許程序利用最大的CPU資源并利用多個(gè)CPU核。程序還每隔10000代保存一次狀態(tài),以防程序或PC關(guān)閉,并且可以從停止的位置繼續(xù)搜索。

適應(yīng)度法

適應(yīng)度方法的工作原理是對(duì)生成的程序的輸出進(jìn)行評(píng)分。通過(guò)查看程序輸出的每個(gè)字符(如果產(chǎn)生任何輸出)并從所需字符中減去其值來(lái)計(jì)算分?jǐn)?shù):
fitness += 256 - Math.Abs(console[i] - targetString[i]);

當(dāng)然,最初大多數(shù)生成的程序甚至不會(huì)編譯,更不用說(shuō)將文本輸出到控制臺(tái)了。這些都被簡(jiǎn)單地丟棄,偏向于至少輸出一些東西的程序;并進(jìn)一步引導(dǎo)和進(jìn)化,直到輸出結(jié)果越來(lái)越接近所需的解決方案。

解釋器指令集

Brainf ck由以下指令集組成:


image.png

結(jié)果?

輸出Hi

人工智能在大約1分鐘內(nèi)成功地編寫(xiě)了一個(gè)程序,在5700代之后輸出“hi”。它產(chǎn)生了以下代碼:
盡管上面的代碼包含解析錯(cuò)誤(例如不匹配的括號(hào)),但是我們的仿真解釋器會(huì)一直計(jì)算結(jié)果,直到程序失敗為止,因此在上述情況下,語(yǔ)法錯(cuò)誤(在找到解決方案之后,在代碼中稍后進(jìn)行介紹) )不會(huì)影響健康度。


您可以嘗試將上面的代碼粘貼到brainf-ck解釋器中。 單擊“啟動(dòng)調(diào)試器”,忽略警告,然后單擊“運(yùn)行到斷點(diǎn)”。 注意輸出。

如果我們剪裁多余的代碼,則會(huì)看到以下語(yǔ)法上有效的代碼:

您可以在程序運(yùn)行時(shí)查看以下屏幕截圖:


AI learning how to program
AI learning how to program, almost there
AI learning how to program, a solution is found

AI program fitness over time

這是歷史圖表,繪制了一段時(shí)間內(nèi)的體能得分。您可以看到人工智能是如何學(xué)習(xí)如何用目標(biāo)語(yǔ)言編程并實(shí)現(xiàn)所需的解決方案的。


Executing the program, developed by the AI

輸出hello

人工智能在大約29分鐘內(nèi)成功地編寫(xiě)了一個(gè)程序,在2520000代之后輸出“hello”。它產(chǎn)生了以下代碼:
+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+]
[[[.+.,,+].-

在生成過(guò)程中,人工智能非常接近于一個(gè)解決方案,但是兩個(gè)字母在一個(gè)循環(huán)中相互綁定。人工智能通過(guò)在有問(wèn)題的循環(huán)中創(chuàng)建一個(gè)內(nèi)部循環(huán),成功地輸出正確的字符,并繼續(xù)處理,從而克服了這個(gè)問(wèn)題。

AI learning how to program
AI learning how to program, a solution is found
AI program fitness over time
執(zhí)行人工智能開(kāi)發(fā)的程序

Hi程序

他成功地寫(xiě)了一個(gè)程序輸出“嗨!“經(jīng)過(guò)大約2小時(shí)7分鐘的1219400代。它產(chǎn)生了以下代碼:

-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]

這其實(shí)是我最喜歡的。運(yùn)行它,您可以看到原因(單擊啟動(dòng)調(diào)試器并運(yùn)行到斷點(diǎn))。就好像電腦知道它在做什么。有趣的是,生成這個(gè)程序要比前兩個(gè)程序花費(fèi)更長(zhǎng)的時(shí)間。這可能是由于使用的字符,其中包括大寫(xiě)字母和符號(hào)。另外兩個(gè)例子使用的字符在ASCII系統(tǒng)中的值更接近,這對(duì)AI來(lái)說(shuō)更容易找到。

AI learning how to program, a solution is found
執(zhí)行人工智能開(kāi)發(fā)的程序
人工智能項(xiàng)目隨時(shí)間變化的適應(yīng)性

輸出reddit

人工智能在大約22分鐘內(nèi)成功地編寫(xiě)了一個(gè)程序,在19.5萬(wàn)代之后輸出“reddit”。它產(chǎn)生了以下代碼:

+[+++++>++<]+>++++++[[++++++.-------------.-.-+.+++++.+++++],.,+,-+-,+>+.++<<+<><+]
-[-<>.]>+.-.+..]<

這次是個(gè)挑戰(zhàn)。這可能是由于它的長(zhǎng)度,或可能是由于d的位置棘手。人工智能會(huì)反復(fù)陷入局部最大值。局部極大值是指當(dāng)遺傳算法在其當(dāng)前參數(shù)內(nèi)找到它能看到的最佳適應(yīng)度時(shí),即使可能存在更好的適應(yīng)度。人工智能無(wú)法跳出洞來(lái)獲得更好的適應(yīng)度,因?yàn)檫@樣做需要適應(yīng)度先下降,然后再增加,這通常違反遺傳算法的規(guī)則。

我能夠通過(guò)在突變功能中加入額外的多樣性來(lái)解決這個(gè)問(wèn)題。以前,這種突變只是通過(guò)改變基因組中的一條指令來(lái)實(shí)現(xiàn)的。突變被增強(qiáng),不僅包括單個(gè)位的突變(替換突變),還包括位的上移(插入突變)和下移(缺失突變)。這種額外的多樣性使人工智能能夠繼續(xù)前進(jìn)。

image.png
人工智能學(xué)習(xí)如何編程,找到了解決方案
人工智能項(xiàng)目隨時(shí)間變化的適應(yīng)性

輸出hello world

這是在大約2小時(shí)內(nèi)經(jīng)過(guò)580900代之后產(chǎn)生的。它產(chǎn)生了以下代碼:
-><[>-<+++]->>++++[++++++++++++++++++<+]>.---.+-+++++++..+++.+>+<><+[+><><>+++++++++.+-<
-++++[++[.--------.+++.------],.-----],,.>.+<<<[><<>]<++>+.[]+[.[+]],[[.]..,<]]],]<+]],[
]],[[+[,+[]-<.,.],--+]-++-[,<.+-<[-<]-><>-]-<>+[-,-[<.>][--+<>+<><++<><-,,-,[,[.>]]<-+[.

+[<.<],]<<<>].[--+[<<->--],-+>]-,[,

如果去掉多余的部分,打印文本的實(shí)際代碼就會(huì)短得多:

-><[>-<+++]->>++++[++++++++++++++++++<+]>.---.+-+++++++..+++.+>+<><+[+><><>+++++++++.+-<
-++++[++[.--------.+++.------],.-----]]

image.png
image.png

輸出 I love all humans

這是6057200代后在大約10小時(shí)內(nèi)產(chǎn)生的。它產(chǎn)生了以下代碼:
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++
++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.--
----------.+++++++++++++.+++++.]-+,.-<[><[[[[[[<-[+[>[<-<-[+[,]-,,-[>[+[-<-,.<]]]<-+<[]+<
.,,>[<,<[.]>[<,<<-.]><,,,--[.--.-

如果刪去多余的部分,打印文本的實(shí)際代碼將變短:

+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++
++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.--
----------.+++++++++++++.+++++.

在上面的運(yùn)行中,為AI提供了300條指令的起始程序數(shù)組大小(即300字節(jié),或者更確切地說(shuō)是2400字節(jié),因?yàn)? double=8字節(jié))。人工智能不需要完整的程序代碼。它能用209條指令編寫(xiě)程序。

注意,此解決方案需要10小時(shí)才能完成。但是,請(qǐng)記住,如果是人工智能程序而不是人來(lái)編程,那么完成一個(gè)程序所需的時(shí)間就不那么重要了。人工智能可以簡(jiǎn)單地在后臺(tái)運(yùn)行,而人工智能可以處理其他任務(wù)。我還預(yù)計(jì),隨著未來(lái)幾年計(jì)算機(jī)速度的提高,計(jì)算時(shí)間將大大縮短。

image.png

未來(lái)

這個(gè)實(shí)驗(yàn)是一個(gè)概念證明,一個(gè)AI程序可以開(kāi)發(fā)自己的計(jì)算機(jī)程序來(lái)執(zhí)行特定任務(wù)。在這方面,它是成功的。 AI完全可以在不了解目標(biāo)編程語(yǔ)言的情況下啟動(dòng),并成功學(xué)習(xí)了如何生成有效的計(jì)算機(jī)程序,該程序在執(zhí)行時(shí)可以解決特定任務(wù)。

與所有遺傳算法一樣,設(shè)計(jì)適應(yīng)度函數(shù)也涉及很多工作。適應(yīng)性功能等效于向AI描述您要查找的內(nèi)容。這樣,創(chuàng)建適應(yīng)性函數(shù)本身就有點(diǎn)像編程(代表人類)。如果AI有可能開(kāi)發(fā)自己的適應(yīng)功能,這將是向前邁出的一步。同時(shí),可能仍可以擴(kuò)展該項(xiàng)目以創(chuàng)建更復(fù)雜的子程序,例如那些接受用戶輸入并計(jì)算結(jié)果的子程序。

十年前,該計(jì)劃在任何合理的時(shí)間內(nèi)都不會(huì)成功。五年前,該計(jì)劃可能要花費(fèi)幾天到幾周的時(shí)間,甚至可能更長(zhǎng)。今天,執(zhí)行只花了幾分鐘。明天,該程序可能會(huì)在幾毫秒內(nèi)運(yùn)行。隨著計(jì)算機(jī)變得越來(lái)越快,功能越來(lái)越強(qiáng)大,可以計(jì)算出越來(lái)越大的搜索空間。我等不及了

如果您發(fā)現(xiàn)這很有趣并且想了解更多信息,請(qǐng)?jiān)贕itHub上下載完整的源代碼或聯(lián)系Kory Becker。閱讀我的有關(guān)在C#.NET中使用遺傳算法和神經(jīng)網(wǎng)絡(luò)的教程。本文中的程序可執(zhí)行文件是使用Brainfuck.NET編譯器編譯的。

2015年1月5日更新

是否想了解AI還能做什么?我也是!在后續(xù)文章中閱讀更多內(nèi)容:突破自我編程人工智能的極限和自我編程人工智能學(xué)習(xí)使用功能。

關(guān)于作者

本文由軟件開(kāi)發(fā)人員和架構(gòu)師Kory Becker撰寫(xiě),他們精通多種技術(shù),包括Web應(yīng)用程序開(kāi)發(fā),機(jī)器學(xué)習(xí),人工智能和數(shù)據(jù)科學(xué)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久天堂夜夜一本婷婷| 又大又长又粗又黄国产 | 亚洲欧美日韩网友自拍| 在线精品首页中文字幕亚洲| 97人妻人人揉人人躁人人| 91在线播放在线播放观看| 高清在线精品一区二区| 国内精品一区二区欧美| 五月婷婷综合激情啪啪| 欧美熟妇一区二区在线| 日韩午夜福利高清在线观看| 内射精品欧美一区二区三区久久久| 亚洲免费视频中文字幕在线观看| 欧美高潮喷吹一区二区| 欧美一本在线免费观看| 狠狠干狠狠操在线播放| 丰满的人妻一区二区三区| 高清一区二区三区大伊香蕉 | 亚洲中文字幕有码在线观看| 亚洲妇女黄色三级视频 | 国产高清在线不卡一区| 99福利一区二区视频| 亚洲伦片免费偷拍一区| 一区二区三区18禁看| 国产成人精品在线播放| 高清国产日韩欧美熟女| 国产精品亚洲二区三区| 国产亚洲精品香蕉视频播放| 九九热视频网在线观看| 国产亚洲精品久久久优势| 中文字幕亚洲精品人妻| 亚洲伦片免费偷拍一区| 欧美午夜性刺激在线观看| 亚洲熟妇熟女久久精品 | 日本成人三级在线播放| 在线观看视频日韩精品| 国产午夜福利在线免费观看| 中国日韩一级黄色大片| 夫妻性生活黄色录像视频| 欧美日韩精品视频在线| 亚洲专区中文字幕视频|