(訊得達(dá)國(guó)際書院 廣東 518000)
雖然中文漢字的文字生成已經(jīng)在許多年前就有人做過(guò),并且訓(xùn)練出了很成熟的模型,但是以前從來(lái)沒(méi)有利用卷積生成式對(duì)抗網(wǎng)絡(luò)來(lái)達(dá)成這個(gè)目的。所以,我們利用卷積神經(jīng)網(wǎng)絡(luò)和生成式對(duì)抗網(wǎng)絡(luò)來(lái)進(jìn)行實(shí)驗(yàn),在經(jīng)過(guò)數(shù)百個(gè)小時(shí)的訓(xùn)練之后成功地訓(xùn)練出了一個(gè)可以自主生成100 種隨機(jī)字體的中文漢字的模型。
早在二十世紀(jì)初期,隨著連接主義學(xué)習(xí)的卷土重來(lái),世界掀起了深度學(xué)習(xí)的熱潮,狹義地說(shuō)就是“很多層”的神經(jīng)網(wǎng)絡(luò)。在機(jī)械學(xué)習(xí)被開(kāi)發(fā)出來(lái)之前,人們使用非機(jī)械學(xué)習(xí)創(chuàng)造出來(lái)的模型都需要人工手調(diào)參數(shù),這無(wú)疑是一項(xiàng)很大的工作量?,F(xiàn)在,歸功于深度學(xué)習(xí),人們大大地降低了模型的操作難度,機(jī)器學(xué)習(xí)者們對(duì)其應(yīng)用的門檻也變低了,使得對(duì)機(jī)器學(xué)習(xí)技術(shù)的發(fā)展帶來(lái)了巨大的便利。在深度學(xué)習(xí)的領(lǐng)域當(dāng)中,人們普遍開(kāi)始運(yùn)用卷積神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)圖片和影視進(jìn)行分析,并且已經(jīng)取得了很大的成果,例如將其運(yùn)用在醫(yī)學(xué)領(lǐng)域,對(duì)病人的病變進(jìn)行檢測(cè),或者對(duì)于文字的識(shí)別和生成。
閱讀和書寫一直以來(lái)都是人們?cè)谏钜约皩W(xué)習(xí)中最基本的兩個(gè)技巧,用來(lái)幫助我們獲取以及傳達(dá)信息。文字已然成為人們生活中不可缺少的一部分,并且不同的字體能給讀者在閱讀時(shí)帶來(lái)不同的感受,所以字體在傳遞信息和情感上起著非常大的作用。而中文,作為全世界使用人數(shù)最多的一門語(yǔ)言,其重要性和影響力更是可想而知。早在之前,微軟公司就曾花費(fèi)數(shù)億美元的資金并且耗時(shí)很長(zhǎng)時(shí)間才打造出了一款全世界漢字使用者都在使用的字體:微軟雅黑。不只是微軟,還有其他很多互聯(lián)網(wǎng)巨頭都曾花費(fèi)巨資打造了自己的中文漢字字體,人們運(yùn)用神經(jīng)網(wǎng)絡(luò)于中文文字的生成這一領(lǐng)域已經(jīng)取得了巨大的成就。然而,雖然目前市面上已經(jīng)有了很多成熟的中文字體,但是打造所花費(fèi)的金錢和時(shí)間都是巨大的。所以,為了要找到一個(gè)更加節(jié)省資源和時(shí)間的方法,我們這次將利用卷積神經(jīng)網(wǎng)絡(luò)以及生成對(duì)抗網(wǎng)絡(luò)一起進(jìn)行試驗(yàn),完成我們目的中的一個(gè)小目標(biāo):通過(guò)我們自己制作的數(shù)據(jù)集,生成正確的中文漢字。經(jīng)過(guò)了超過(guò)一百小時(shí)的訓(xùn)練以后,我們成功地利用卷積生成式對(duì)抗網(wǎng)絡(luò)訓(xùn)練出了一個(gè)能夠自主隨機(jī)地生成100 種不同字體的中文漢字的模型。假如在將來(lái)能將我們這次實(shí)驗(yàn)訓(xùn)練出來(lái)的模型繼續(xù)深入發(fā)展,對(duì)這個(gè)模型做更進(jìn)一步的改善,那么它將能生成不僅僅是中文,而可能生成隨機(jī)字體的世界上任何一種文字。有了這個(gè)模型,人們可以很輕松地解決現(xiàn)在人們面對(duì)創(chuàng)造新的字體需要花費(fèi)大量的人力和物力的這一巨大困難。
人工神經(jīng)網(wǎng)絡(luò)一般簡(jiǎn)稱為神經(jīng)網(wǎng)絡(luò)或連接模型。神經(jīng)網(wǎng)絡(luò)是一種通過(guò)應(yīng)用類似于人類的大腦神經(jīng)連接結(jié)構(gòu)對(duì)信息進(jìn)行處理的數(shù)學(xué)模型。神經(jīng)網(wǎng)絡(luò)因?yàn)槠鋸?fù)雜程度,通過(guò)調(diào)整網(wǎng)絡(luò)中無(wú)數(shù)節(jié)點(diǎn)直接連接的關(guān)系來(lái)處理信息[1]。
卷積神經(jīng)網(wǎng)絡(luò)作為深度學(xué)習(xí)的代表算法之一,是一種具有深度結(jié)構(gòu),包含卷積計(jì)算的前饋神經(jīng)網(wǎng)絡(luò)。由于卷積神經(jīng)網(wǎng)絡(luò)具有極高的學(xué)習(xí)能力,可以按其階層結(jié)構(gòu)對(duì)輸入的信息進(jìn)行平移不變的分類,它也被稱為“平移不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)”。目前卷積神經(jīng)網(wǎng)絡(luò)被大量運(yùn)用在圖像和視頻領(lǐng)域[3]。
生成式對(duì)抗網(wǎng)絡(luò)是近年來(lái)在復(fù)雜分布上最具有前景的無(wú)監(jiān)督深度學(xué)習(xí)模型。模型通過(guò)兩個(gè)主要的模塊:判別和生成模型兩個(gè)模型互相不斷地博弈進(jìn)行學(xué)習(xí)并且能產(chǎn)生相當(dāng)好的輸出[5]。
截止到今天,機(jī)器學(xué)習(xí)和人工智能已經(jīng)發(fā)展到了較為成熟的階段,人們也將神經(jīng)網(wǎng)絡(luò)運(yùn)用到了字體生成的領(lǐng)域當(dāng)中并且取得了很大的成就。比如:從20 世紀(jì)50年代起,許多歐美國(guó)家為了將數(shù)量日漸增長(zhǎng)的各種報(bào)刊或資料報(bào)表等文字材料輸入進(jìn)電腦里進(jìn)行處理,他們對(duì)西文OCR Optical Character Recognition 光學(xué)字符識(shí)別技術(shù)進(jìn)行了研究用于代替手工鍵盤的輸入。又或者是在70年代以來(lái)諸多日本學(xué)者對(duì)印刷體漢字的識(shí)別做出了許多具有代表性的研究,例如東芝在1977年研制的單體印刷漢字識(shí)別系統(tǒng)就可以識(shí)別2000個(gè)漢字;日本武藏野電氣研究所研制的漢字識(shí)別系統(tǒng)可以識(shí)別2300多個(gè)漢字字體,在20 世紀(jì)80年代初期代表了當(dāng)時(shí)漢字識(shí)別的最高水平。隨著科技的逐漸發(fā)展,以及對(duì)神經(jīng)網(wǎng)絡(luò)的不斷探索,漢字字體識(shí)別的混排識(shí)別率和穩(wěn)定性都在近年來(lái)得到了很大的提高。但是,漢字識(shí)別領(lǐng)域仍存在著很多的問(wèn)題和困難等待著人們?nèi)ソ鉀Q:對(duì)漢字識(shí)別的正確率,識(shí)別速度以及價(jià)格問(wèn)題[2]。截止到目前為止人們都還沒(méi)有找到一種有效的方法能夠同時(shí)解決以上的三個(gè)問(wèn)題,導(dǎo)致人們?cè)谥形臐h字的識(shí)別和生成領(lǐng)域的發(fā)展遭到了很大的阻礙。對(duì)此,我們想到了一個(gè)方法:利用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)和生成式對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Networks)兩者相結(jié)合,訓(xùn)練出一個(gè)能夠穩(wěn)定的識(shí)別和生成中文漢字的模型。這兩種神經(jīng)網(wǎng)絡(luò)都是目前在人工智能、機(jī)器學(xué)習(xí)領(lǐng)域最具前途并且運(yùn)用最廣的神經(jīng)網(wǎng)絡(luò),而它們兩者的結(jié)合卷積生成式對(duì)抗網(wǎng)絡(luò)也有很廣泛的運(yùn)用,比如:圖像識(shí)別,語(yǔ)音生成或者是疾病的分類等等。所以我相信在經(jīng)過(guò)漫長(zhǎng)的訓(xùn)練之后,我們也能得到一個(gè)較為成熟的模型用于解決目前人們?cè)跐h字的識(shí)別和生成領(lǐng)域上遇到的難題,并且為人們省下大量的資金和時(shí)間。
卷積計(jì)算是通過(guò)兩個(gè)不同的函數(shù)生成第三個(gè)函數(shù)的一種數(shù)學(xué)運(yùn)算,表征兩個(gè)函數(shù)經(jīng)過(guò)翻轉(zhuǎn)和平移的重疊部分的面積。
設(shè)?和是兩個(gè)可積函數(shù),做積分:
可以證明幾乎關(guān)于所有實(shí)數(shù)x,都存在有上述積分。當(dāng)x的取值不同,這個(gè)積分就有不同的函數(shù)h(x),稱為函數(shù)f和g的卷積,記作
h(x)=(f*g)(x)。
在我們的實(shí)驗(yàn)里,我們的數(shù)據(jù)集輸入的數(shù)據(jù)大小是跟MNIST數(shù)據(jù)集中的輸入大小是一樣的28*28的圖片。當(dāng)數(shù)據(jù)進(jìn)入GAN 生成網(wǎng)絡(luò)的時(shí)候,我們的生成網(wǎng)絡(luò)中每一層都是一個(gè)卷積層,在卷積層中數(shù)據(jù)經(jīng)過(guò)卷積運(yùn)算計(jì)算出一個(gè)值,這就是我們的因變量。
輸入:
輸出:
上述公式是卷積神經(jīng)網(wǎng)絡(luò)中每一個(gè)卷積層的輸入和輸出公式,W是每一個(gè)單獨(dú)的卷積層都有自己不同的權(quán)重矩陣,W是權(quán)重,是個(gè)卷積核。
3.3.1 KL 散度
(1)信息熵
信息熵是用來(lái)描述信源所有可能發(fā)生情的平均不確定度。
對(duì)于信源中的單個(gè)符號(hào),它的熵為:
隨機(jī)變量X可以取值為X={X1,X2,...,Xn},對(duì)應(yīng)的概率為P(X=xi)(i=1,2,...,n),X的熵的定義為:
信息熵與事件的可能性數(shù)量有關(guān),如果概率均等,存在的可能越多,信息熵越大,信息的不確定性也越大。
(2)相對(duì)熵
在一般情況下,P代表數(shù)據(jù)的真實(shí)分布,Q表示數(shù)據(jù)的近似分布。在一定程度上,熵能用來(lái)度量?jī)蓚€(gè)隨機(jī)變量的距離。但因?yàn)镵L 散度是非對(duì)稱的,所以它不能真正的代表距離。KL 散度常用于衡量?jī)蓚€(gè)概率分布之間的相似度。設(shè)P(x)和Q(x)是X取值的兩個(gè)概率分布,它們的相對(duì)熵是:
它的積分形式為:
KL 散度是非負(fù)數(shù)因?yàn)閷?duì)數(shù)函數(shù)是凸函數(shù)。
3.3.2 JS 散度
JS 散度是對(duì)稱的,取值在0-1 之間,度量了兩個(gè)概率分布的相似度。如果兩個(gè)分布完全一樣,那么JS 散度取最小值0;相反如果兩個(gè)分布沒(méi)有交集,那么JS 散度取最大值1[8]。
3.3.3 優(yōu)化目標(biāo)
我們可以在求解的過(guò)程中把最大和最小分開(kāi),現(xiàn)在給定G的情況下把,最大化求解D。然后再把D固定,把,最小化去求解G[8]。
3.3.4 梯度下降和反向傳播算法
卷積神經(jīng)網(wǎng)絡(luò)的卷積層和池化層都是通過(guò)梯度下降和反向傳播算法來(lái)進(jìn)行訓(xùn)練的。訓(xùn)練的目標(biāo)是求出的表達(dá)式[7]。
這里就定義了我們的誤差方程,隨著每一次的更新,權(quán)重更加偏近最小值,它的誤差也會(huì)隨著減小。
可以求出f(D)的二階導(dǎo)數(shù)小于0,所以:
雖然最優(yōu)的D在我們的實(shí)踐中是不可計(jì)算的,但它的存在讓我們可以證明最優(yōu)的G是存在的,我們?cè)诿看斡?xùn)練中只要靠近最優(yōu)的D即可。
我們的數(shù)據(jù)集是來(lái)自于網(wǎng)絡(luò)上各種不同的字體,基于這些字體我們可以隨機(jī)生成數(shù)據(jù)集中任何字體的中文漢字。這個(gè)數(shù)據(jù)集一共包含了100 種不一樣字體的黑白中文漢字。首先我們把原本的字體大小從64*64 更該成了28*28,并且將他們從黑色調(diào)成了白色,然后最后再把數(shù)據(jù)集放進(jìn)模型中進(jìn)行訓(xùn)練(圖1)。
圖1 數(shù)據(jù)收集
首先我們?cè)贑NN-MNIST的基礎(chǔ)上,將原有的MNIST的數(shù)據(jù)集更改成我們自己創(chuàng)建的中文漢字?jǐn)?shù)據(jù)集。然后我們根據(jù)原本代碼規(guī)定的輸入的數(shù)據(jù)大小將數(shù)據(jù)集中的輸入形狀更換成64*64 大小的數(shù)據(jù)。
然后,我們使用了控制變量法,每一次只修改一個(gè)參數(shù),將我們代碼的batch size,learning rate,activation function,training epoch,以及網(wǎng)絡(luò)的結(jié)構(gòu)都修改過(guò)很多次,企圖去找到效果最好的結(jié)果。最后,在經(jīng)過(guò)上百次的調(diào)整參數(shù)以后,我們發(fā)現(xiàn)當(dāng)我們使用leaky_relu 作為我們的activation function,將learning rate 調(diào)整為0.0002,并且將generator和discriminator的訓(xùn)練次數(shù)改為1:15,我們得到了嫩的出最好訓(xùn)練結(jié)果的一個(gè)模型。
在經(jīng)過(guò)超過(guò)1000個(gè)小時(shí)的訓(xùn)練以后,我們得到了一個(gè)能生成比較清晰的文字的模型(圖2)。
圖2 得到了一個(gè)能生成比較清晰的文字的模型
(1)Batch size對(duì)訓(xùn)練的影響(圖3)
圖3 Batch size對(duì)訓(xùn)練的影響
Batch size的大小決定了在每一個(gè)循環(huán)中每一組訓(xùn)練的數(shù)據(jù)數(shù)量的大小,生成的文字?jǐn)?shù)量也會(huì)隨之變化。
Batch size 越大,訓(xùn)練的數(shù)據(jù)數(shù)量就越多,相對(duì)的速度也會(huì)越快,但是對(duì)于電腦內(nèi)存的占用也比較大。相反,如果Batch size 調(diào)小,那么訓(xùn)練的數(shù)據(jù)就會(huì)變少,相對(duì)訓(xùn)練的速度就會(huì)變慢(表1)。
表1 Batch size對(duì)生成數(shù)據(jù)的影響
(2)Learning Rate對(duì)訓(xùn)練的影響(圖4)
圖4 Learning Rate對(duì)訓(xùn)練的影響
在生成式對(duì)抗模型中,我們有生成器和判別器這兩個(gè)模型需要訓(xùn)練,因此也可以調(diào)整兩個(gè)模型的Learning rate。當(dāng)我們單獨(dú)把這兩個(gè)模型中的任意一個(gè)模型Learning rate 提高以后,我們可以清楚看到這個(gè)模型在每次訓(xùn)練之后的loss都會(huì)減小,并且使得另外一個(gè)模型的loss 逐漸升高。
(3)網(wǎng)絡(luò)結(jié)構(gòu)對(duì)訓(xùn)練的影響(圖5)
圖5 網(wǎng)絡(luò)結(jié)構(gòu)對(duì)訓(xùn)練的影響
在我們的實(shí)驗(yàn)當(dāng)中,最初generator和discriminator在一次訓(xùn)練中同樣都只訓(xùn)練一次。但是我們發(fā)現(xiàn)這樣訓(xùn)練出來(lái)的結(jié)果有很多缺點(diǎn):generator的loss 很大導(dǎo)致很難生成出清晰的文字,并且圖片的顏色也非常模糊。后來(lái)我們逐漸增加了每一次訓(xùn)練中g(shù)enerator的訓(xùn)練次數(shù),雖然這會(huì)導(dǎo)致訓(xùn)練的時(shí)間增加,但隨著generator的訓(xùn)練次數(shù)逐漸增加到10-15次時(shí),我們發(fā)現(xiàn)generator的loss 也在減少,生成出的圖片清晰度慢慢增加,并且也能在更早的epoch中生成出清晰可見(jiàn)的文字。
除了這些以外,我們還發(fā)現(xiàn),筆畫比較多的漢字要比簡(jiǎn)單的文字更加難生成出清晰的圖片。
(4)其他影響(圖6)
圖6 其他影響
同時(shí)在實(shí)驗(yàn)過(guò)程中除了上述的幾個(gè)因素以外我們還發(fā)現(xiàn)文字的復(fù)雜程度似乎對(duì)文字生成的結(jié)果也有著一定的影響。當(dāng)漢字的筆畫比較多,比較復(fù)雜時(shí),同樣的參數(shù)設(shè)定生成出來(lái)的圖片要比筆畫少的漢字生成出來(lái)的結(jié)果要差很多。
由于這一次的實(shí)驗(yàn)只是一次嘗試,這次實(shí)驗(yàn)還存在著很多的不足:(1)數(shù)據(jù)集僅僅只有11個(gè)中文漢字;
(2)在訓(xùn)練過(guò)程中判別器的Loss 早早地就變成了0,但生成器的Loss 還在不斷增加,這導(dǎo)致了在訓(xùn)練后期不能進(jìn)一步生成更清晰的文字圖片。
但是只要將來(lái)人們能在這個(gè)基礎(chǔ)上再花一點(diǎn)點(diǎn)時(shí)間,繼續(xù)增大我們的數(shù)據(jù)集和訓(xùn)練次數(shù),我相信我們的這個(gè)模型一定可以解決人們能目前在中文漢字的識(shí)別和生成領(lǐng)域所面臨的一系列的問(wèn)題。