Author: UMU

グッドスタイン数列G(4)の最初の約100項を見て0に収束することを実感してみた

 

グッドスタイン数列は,必ず0に収束する収束速度がとても遅い数列として知られている.今回は,この数列を対応する進数で表示して,確かにこのままいけばそのうち減りそうだというのを実感してみることにする.

base formula value の順.下に行くほどbaseがglowing!

2 (1×2^(1×2^(1) + 0) + 0) 4
3 (2×3^(2) + 2×3^(1) + 2) 26
4 (2×4^(2) + 2×4^(1) + 1) 41
5 (2×5^(2) + 2×5^(1) + 0) 60
6 (2×6^(2) + 1×6^(1) + 5) 83
7 (2×7^(2) + 1×7^(1) + 4) 109
8 (2×8^(2) + 1×8^(1) + 3) 139
9 (2×9^(2) + 1×9^(1) + 2) 173
10 (2×10^(2) + 1×10^(1) + 1) 211
11 (2×11^(2) + 1×11^(1) + 0) 253
12 (2×12^(2) + 11) 299
13 (2×13^(2) + 10) 348
14 (2×14^(2) + 9) 401
15 (2×15^(2) + 8) 458
16 (2×16^(2) + 7) 519
17 (2×17^(2) + 6) 584
18 (2×18^(2) + 5) 653
19 (2×19^(2) + 4) 726
20 (2×20^(2) + 3) 803
21 (2×21^(2) + 2) 884
22 (2×22^(2) + 1) 969
23 (2×23^(2) + 0) 1058
24 (1×24^(2) + 23×24^(1) + 23) 1151
25 (1×25^(2) + 23×25^(1) + 22) 1222
26 (1×26^(2) + 23×26^(1) + 21) 1295
27 (1×27^(2) + 23×27^(1) + 20) 1370
28 (1×28^(2) + 23×28^(1) + 19) 1447
29 (1×29^(2) + 23×29^(1) + 18) 1526
30 (1×30^(2) + 23×30^(1) + 17) 1607
31 (1×31^(2) + 23×31^(1) + 16) 1690
32 (1×32^(2) + 23×32^(1) + 15) 1775
33 (1×33^(2) + 23×33^(1) + 14) 1862
34 (1×34^(2) + 23×34^(1) + 13) 1951
35 (1×35^(2) + 23×35^(1) + 12) 2042
36 (1×36^(2) + 23×36^(1) + 11) 2135
37 (1×37^(2) + 23×37^(1) + 10) 2230
38 (1×38^(2) + 23×38^(1) + 9) 2327
39 (1×39^(2) + 23×39^(1) + 8) 2426
40 (1×40^(2) + 23×40^(1) + 7) 2527
41 (1×41^(2) + 23×41^(1) + 6) 2630
42 (1×42^(2) + 23×42^(1) + 5) 2735
43 (1×43^(2) + 23×43^(1) + 4) 2842
44 (1×44^(2) + 23×44^(1) + 3) 2951
45 (1×45^(2) + 23×45^(1) + 2) 3062
46 (1×46^(2) + 23×46^(1) + 1) 3175
47 (1×47^(2) + 23×47^(1) + 0) 3290
48 (1×48^(2) + 22×48^(1) + 47) 3407
49 (1×49^(2) + 22×49^(1) + 46) 3525
50 (1×50^(2) + 22×50^(1) + 45) 3645
51 (1×51^(2) + 22×51^(1) + 44) 3767
52 (1×52^(2) + 22×52^(1) + 43) 3891
53 (1×53^(2) + 22×53^(1) + 42) 4017
54 (1×54^(2) + 22×54^(1) + 41) 4145
55 (1×55^(2) + 22×55^(1) + 40) 4275
56 (1×56^(2) + 22×56^(1) + 39) 4407
57 (1×57^(2) + 22×57^(1) + 38) 4541
58 (1×58^(2) + 22×58^(1) + 37) 4677
59 (1×59^(2) + 22×59^(1) + 36) 4815
60 (1×60^(2) + 22×60^(1) + 35) 4955
61 (1×61^(2) + 22×61^(1) + 34) 5097
62 (1×62^(2) + 22×62^(1) + 33) 5241
63 (1×63^(2) + 22×63^(1) + 32) 5387
64 (1×64^(2) + 22×64^(1) + 31) 5535
65 (1×65^(2) + 22×65^(1) + 30) 5685
66 (1×66^(2) + 22×66^(1) + 29) 5837
67 (1×67^(2) + 22×67^(1) + 28) 5991
68 (1×68^(2) + 22×68^(1) + 27) 6147
69 (1×69^(2) + 22×69^(1) + 26) 6305
70 (1×70^(2) + 22×70^(1) + 25) 6465
71 (1×71^(2) + 22×71^(1) + 24) 6627
72 (1×72^(2) + 22×72^(1) + 23) 6791
73 (1×73^(2) + 22×73^(1) + 22) 6957
74 (1×74^(2) + 22×74^(1) + 21) 7125
75 (1×75^(2) + 22×75^(1) + 20) 7295
76 (1×76^(2) + 22×76^(1) + 19) 7467
77 (1×77^(2) + 22×77^(1) + 18) 7641
78 (1×78^(2) + 22×78^(1) + 17) 7817
79 (1×79^(2) + 22×79^(1) + 16) 7995
80 (1×80^(2) + 22×80^(1) + 15) 8175
81 (1×81^(2) + 22×81^(1) + 14) 8357
82 (1×82^(2) + 22×82^(1) + 13) 8541
83 (1×83^(2) + 22×83^(1) + 12) 8727
84 (1×84^(2) + 22×84^(1) + 11) 8915
85 (1×85^(2) + 22×85^(1) + 10) 9105
86 (1×86^(2) + 22×86^(1) + 9) 9297
87 (1×87^(2) + 22×87^(1) + 8) 9491
88 (1×88^(2) + 22×88^(1) + 7) 9687
89 (1×89^(2) + 22×89^(1) + 6) 9885
90 (1×90^(2) + 22×90^(1) + 5) 10085
91 (1×91^(2) + 22×91^(1) + 4) 10287
92 (1×92^(2) + 22×92^(1) + 3) 10491
93 (1×93^(2) + 22×93^(1) + 2) 10697
94 (1×94^(2) + 22×94^(1) + 1) 10905
95 (1×95^(2) + 22×95^(1) + 0) 11115
96 (1×96^(2) + 21×96^(1) + 95) 11327
97 (1×97^(2) + 21×97^(1) + 94) 11540
98 (1×98^(2) + 21×98^(1) + 93) 11755
99 (1×99^(2) + 21×99^(1) + 92) 11972

減りそうだなぁ.

 

 

(眺めているとわかるが,数自体は増えていてもオーダーの増大の原因となる一番の累乗項は必ず「増えない」ことがわかる)

 

DeeperBind: Enhancing Prediction of Sequence Specificities of DNA Binding Proteins他(AI班の記録)

2017/1/18のAI班の記録です。

発表したもの:

・DeeperBind: Enhancing Prediction of Sequence Specificities of DNA Binding Proteins

LSTMとCNNを用いて特定の転写因子との親和性(affinity)が高いDNA領域を発見する論文を紹介。

DeepBindよりも高い精度を出せるらしい。名前が安直。

・強化学習ベースの言語モデル(独自)

環境と強化学習するエージェント2台がある系において、エージェントが状態と語の関係性を獲得する過程をモデル化し、実装して考察したことについて発表。(時間があったら後日詳細について書きます)

 

AI班のきろく(2017/1/11)

記録を残しておいたほうがいいということになったのでAI班の活動記録.

2017/1/13にやったこと

トピックモデル

トピックモデルの話.

ユニグラムモデル,混合ユニグラムモデル,潜在的ディリクレ配分法,の流れで説明.膨大な文書データから潜在的トピックを抽出するためのモデル.pLSAの話もした.混合ユニグラムモデルと潜在的ディリクレ配分法のグラフィカルモデルの違いなど.

Detection of phase transition via convolutional neural network

CNNで二次元イジング模型の相転移に関する情報を抽出したいという感じの論文.理論的な解析とCNNによって得られる情報がかなり一致するのでよい.らしい.

参考文献:Tanaka, Akinori, and Akio Tomiya. “Detection of phase transition via convolutional neural network.” arXiv preprint arXiv:1609.09087 (2016).

宣伝

KCSは慶應義塾大学で唯一人工知能(情報論的学習)の理論や実装を勉強しているサークルです.興味のある方は是非声をかけてください.

PA情報源からPPAPが出てきたときPen-Pineapple-Apple-Penするプログラムを作った。

ppap

コード

<br />
import random</p>
<p>LI = [&quot;P&quot;,&quot;A&quot;]<br />
ST = &quot;&quot;</p>
<p>N = 100<br />
for i in range(N):<br />
    r = random.randint(0,1)<br />
    ST = ST + LI[r]<br />
    print (LI[r])<br />
    if (ST[-4:]==&quot;PPAP&quot;):<br />
        break<br />
print (&quot;!!!!Pen-Pineapple-Apple-Pen!!!!&quot;)<br />

実行結果例

<br />
A<br />
A<br />
A<br />
A<br />
A<br />
A<br />
P<br />
A<br />
P<br />
P<br />
P<br />
A<br />
P<br />
!!!!Pen-Pineapple-Apple-Pen!!!!<br />

ŧ‹”ŧ‹”ŧ‹”ŧ‹”(๑´ㅂ`๑)ŧ‹”ŧ‹”ŧ‹”ŧ‹”

※KCSの広告戦略です

Chaos;Simulatorを開発しましたが

三田祭に出展したカオス描画ソフト「Chaos;Simulator」です。このソフトはある方程式をもとにしシミュレーションを行い、その結果に対応する画像を出力します。方程式のパラメータを変化させることで(左下のバー)、さまざまな画像を出力できます。以下の画像は出力結果のサンプルです。

cxy552uuaaaoua1 cxyquucuqaa8s1 cxyy0gmusaaohuo

素因数分解専用27qbit量子コンピュータシミュレータ

素因数分解専用27qbit量子コンピュータシミュレータを実装しました、という話を書きたい。本当は出展したものに対してすべて記事と説明を書こうと思っていたのですが、なんとコミケに出展するので、時間がありません。ですから、今回はKCSが三田祭で出展したものについて書き下そうと思います。後日、それぞれについての説明が書かれると良いなと思っております。

三田際では、(私が知る限り)次のようなアプリケーションを出展しました。

・素因数分解専用27qbit量子コンピュータシミュレータ

素因数分解を量子コンピュータでする

・アローオートマトンシミュレーター

新開発のオートマトン

・Chaos;Simulator

カオスの表示

・Spin Action Creator

エディット機能つきアクションゲーム

・GPU2値化

GPUを使って適応的な2値化をする

・暗殺のゲーム

暗殺をする。

・似顔絵つくるやつ

画像をクラスタリングして色分け

・音声分析ソフト(すごい)

GMMを使った手法

・VR Shooting game

現代表のチームの作品と、別なやつがある。

三田際では、(私が知る限り)次のような研究展示を出展しました。

・リアルタイム流体シミュレーション

リアルタイムで流体の計算をする方法のはなしのはじまり

・飛行機は何で飛ぶのかといった話

すごい

・変な言語とコンパイラ

やばい

・モデリングの話

むずい

・量子コンピューターの話

むずいむずい

・アローオートマトンの話

はなすとながくなる

・ごちうさ?

??Screenshot (783)

タイトルを良く覚えていないor覚えてないのがあるので、あとで修正予定。

量子コンピュータSimulatorを開発しました+量子アルゴリズムの練習をした→悲しい事実に気づく(1)

なぜ量子コンピュータを作ったのか

こんにちは.

今回は,唐突に思いついて作った量子コンピュータシミュレータと,その量子コンピュータを使った量子アルゴリズムの構築法を勉強するための練習についてのお話です.

まず,「量子コンピュータ」と聞くと,一見難しいものと思えるかもしれません.実際,僕も数日前までにはそう思ってました.ところが,数日前に,古典コンピュータ(今皆さんが使っているものです)で数値計算を行うことによって,量子コンピュータの挙動を再現することが可能だということを知りました.このときに,量子コンピュータが実際どういう仕組みで動いているかよくわかっていないことに気付いて,文献を漁って調べてみることにしました.すると,なんだか難しそうだなぁと勝手に思っていたものは,実際にはそんなに難しくなく,再現するための数値計算の手法も難しくないことを知りました.

という経緯があって,量子コンピュータが(数値計算上では)誰にでもつくれるという考えに至り,実際に作ってみようということになりました.

量子コンピュータは何で動くか

古典コンピュータは,AND回路やOR回路などの,複数の古典ビットを何らかの物理的相互作用を用いて変化させることで,様々な情報を処理しています.このことからもわかるように,古典コンピュータの情報の最小単位は,1古典Bitという,0か1かの区別であり,これより小さな情報の単位は存在しません.普段我々が目にしている古典コンピュータは,古典Bitを用いてどのように情報を処理しているのか見ることはありませんが,中身は古典Bitの膨大な操作によって,動いています.これらは,古典Bitをどのように操作するかの技術(≒アルゴリズム)によって支えられています.

一方,量子コンピュータの動作は古典Bitによるものではありません.量子コンピュータの情報の最小単位は「量子ビット(qubit)」と呼ばれるものです.量子ビットは,0か1かの厳密な区別である古典ビットと違い,0か1かの確率的な状態を保持しています.量子ビットは古典ビットではないので,表記法も異なります.例えば,1量子ビットは,a|0>+b|1>のように表記します(ディラックのブラケット記法).ここで,a,bは複素数です.つまり,量子ビットは,0と1がそれぞれa,bだけ含まれる,という状態を保持することができるのです.もちろん,量子ビットは量子(の性質を持つもの)ですから,「観測」を行うことで0か1かが確定します.すなわち,|0>か|1>になるということです.どちらに確定するかは,もともとの量子ビットの状況(a|0>+b|1>)に応じて確率的に決まります.具体的には,a|0>+b|1>である量子ビットが|0>になる確率は,|a|^2で,|1>になる確率は,|b|^2です(このことからもわかるように,|a|^2 + |b|^2 = 1 が満たされる必要があります).ここで重要なポイントは,我々は量子ビットの状態を「観測」せずに知ることができないということです.これは,a,bを直接的に知ることができないということを表しています.

もう一つ,量子ビットについての重要なポイントがあります.それは,量子の「もつれ(entanglement)」です.量子のもつれとは,簡単に言うと,複数の量子Bitがあったとき,複数の量子Bitを観測したときの確率論的独立性がない状態のことです.具体例をあげてみます.今,2つの量子ビットX,Yがあったとします.X,Yがもつれていないときは,XとYを観測したとき,観測されたXの値が0,1どちらであっても,観測されたYが0,1を取る確率は,変わりません.これは,2つのさいころをどうじに投げた状況に似ています.一方のサイコロの目が1だろうが,2だろうが,もう一方のサイコロの目は等しく1/6ですよね.しかしながら,X,Yがもつれているときは,Xの値が0,1どちらになるかによって,Yが0,1どちらになるかの確率が変わってしまうのです.サイコロの例でいうと,2つのサイコロを同じ向きで完全に固定したときに似ています.一方のサイコロの値が1であったら,もう一方は1でしょう.もちろん,一方のサイコロの値が1であったら,もう一方は奇数が出やすくなる,のような例もありですね.このようなもつれ,の状態は,もはや|X>=a|0>+b|1>,|Y>=c|0>+d|1>のような表記はできません.量子がもつれているような状態を表記するためには,|XY>=e|00>+f|01>+g|10>+h|11>のようにします.このような状態の量子ビット群では(X,Y)が(観測したときに)(0,0)を取る確率がe^2,(0,1)を取る確率がf^2,…ということを意味しています.ここまでくればお気づきでしょうが,(任意にもつれさせることのできる)量子ビットがn個あれば,2^n通りの観測結果の確率を表現できます.このことは,非常に重要なことです.すなわち,適切に量子ビットを操作することで,確率的に存在しているあらゆる組み合わせの計算を一度に行える可能性があるということです.

これらの話から,量子コンピュータは,どのようなアルゴリズムで動くのか予想がついた方もいるでしょう.すなわち,量子コンピュータは,量子ビットを操作し,もつれさせ,観測を行うことで,結果を得る,という仕組みです.

量子コンピュータをシミュレートする

と,いうのが量子コンピュータの簡単な説明なのですが,文中に会ったように,結局は,量子の状態は.量子ビット数nに対して,2^n個の複素数で表現できるということです.量子の操作は,この2^n個の複素数を,量子の操作に対応する関数を用いて,写像させることで表現できます.つまり,古典的コンピュータで,量子コンピュータがシミュレート(数値計算で仮想的に実現するということ)することができるということです.よって,作りました(演繹的).

今回は,「量子コンピュータが実装できたよ」ということを示すために,簡単な量子プログラムを作って,結果どうなったかを示したいと思います.そのために,まず(このシミュレータが)量子操作としてどのような操作が行えるのかを,簡単に書いておきます.

.量子ビット数は11qbit.(なぜ,11なのかは,特別な理由はない)

・量子ビット初期化:量子ビットを,任意の確定値にする(|XYZ…>=|01010…>)

・1つの量子ビット(任意)を,パウリ行列(X,Y,Z)とかアダマール行列(H)を用いて変換する.(詳しくは後述)

・1つの制御量子ビット,1つの目標量子ビットを,パウリ行列(X,Y,Z)とかアダマール行列(H)を用いて,制御変換する.(詳しくは後述)

・2つの制御量子ビット,1つの目標量子ビットを,パウリ行列(X)を用いて,制御制御変換する.(詳しくは後述する.)

imagee
量子コンピュータシミュレータ(開発中)の画面

これらの操作機能を持った,量子コンピュータを使って,(僕が勝手に考えた問題)4=x+yを解いてみようと考えた.

…のだが,量子プログラムを書いてからとても残念なことに気づいてしまったのである.

文章が予想以上にながくなったので,これを前半として,前後半に分けて投稿することにする.つづきは,後半で.

 

 

 

 

音声分析合成システムWORLDをPythonに移植した

最近,音声の声質変換を行うために,Pythonで使えるライブラリを探していました.matlab上で使える便利な音声分析合成ソフトとして「WORLD」が存在しますが,これをPython上で使おうとすると少々めんどくさいということがありました.そこで,科学研究用のスタンダードなPython開発環境Anacondaがあれば簡単にWORLDを使えるように,matlabのコードを参考にPythonへ完全移植を行っています.とりあえず,基本的な分析→合成までの部分の移植が完了したので,移植したコードがまともに動くかどうかの検証も含めて記事にしてみました.

 

まずは,元の音声データです.この音声データをもとに,パラメータを抽出(分析)し,さらに再合成することで音声データが再構築されます.再構築する際に,パラメータを統計的に変化させて別人の声を生成する方法が,「統計的声質変換」です.

 

次に,正規版(matlab)の変換結果です.

 

最後に,移植版(Python)の変換結果です.

 

聞いてみると,正規版と移植版の違いが分かると思いますが,これは,matlab版で使用されている一部の関数が,pythonでは存在しないために,なるべく同じような挙動をするようにコードを書いていますが,やや違いがでてきてしまうためです.

なお,この移植版を公開していいかわからないため,公開するかどうかは後日決定します.

今後,移植を完成させつつ,声質変換についての記事も書いていこうと思います.BYE!

 

 

–ここから残念なお話–

まず,matlabからpythonに移植するとき,配列のインデックスの書き方の違いで,とても混乱した.matlabでは,配列のはじめは1から始まるが,Pythonでは一般的な言語と同じく0である.これだけなら,数値を1ずらすだけでいいのだが(実際にはそれだけでもかなりのストレスである.),配列から一部の列を取り出す際,例えば,[0,1,2,3,4,5]という配列から[2,3,4]を取り出すとき,取り出しの記述はPythonでは2:5(2番目から5番目の意)となり,Matlabでは3:5(3番目から5番目の意)とかく(Pythonでは,一番最後のインデックスは無視される.)これが非常に頭を混乱させる要因となっており,一番混乱したときは,matlabのコードを実行したときの図を紙に書いて,紙に書かれた内容をPythonコードで書くという所業をしてしまった.

さらに,面倒くさいのが,matlabで定義されている関数を,pythonで移植する場合,matlabの関数となるべく近い挙動をするpythonコードを書く必要がある.pythonで完全一致する関数があればいいのだが(うれしいことに,汎用的なものは共通化されているようだ),すべてきれいに一致するとは限らないので,なるべく同じ計算結果となるようにコードを書く必要があった.

一部は,面倒くさいので放置しているが,聞こえ上は似ているものができたので,まずは良しとすることにした.

 

LOGSPECTROGRAMさむねいる