きみだんごの日記帳

日記帳の形を借りて、創作活動の成果を発表していきたいと思います。
荒井公康

コードスケールの構成音と性格

2022-11-19 15:55:30 | 日記

ドスケールの構成音と性格(作曲の一手法例)(荒井公康著)
                            with 偽終止についてのまとめ
表の見方は、例えば一番上はCM7にイオニアンを適用した場合のコードスケールの構成音は二つのコードCM7とDm7の構成音を合わせたものという意味です。


コードスケール   構成音

(CM7 ion) CM7 Dm7
(CM7 lyd) CM7 D7
(Cm7 dor) Cm7 Dm7
(Cm7 dor-2) Cm7 -D+M7
(Cm7 phr) Cm7 -DM7
(Cm7 aeo) Cm7 Dm7-5
(Cm7 n) Cm7 Dm7-5
(Cm7 h) CmM7 Dm7-5
(Cm7 m) CmM7 Dm7
(Cm7-5 loc) Cm7-5 -DM7
(Cm7-5 loc+2) Cm7-5 Dm7-5
(C7 mix) C7 Dm7
(C7 mixsus4) C7 Dm7
(C7 mix-6) C7 Dm7-5
(C7 lyd-7) C7 D7
(C7 mmp5) C7 Dm7-5
(C7 hmp5) C7 -DM7add9
(C7 alt) C7-5 -DmM7add9
(C7 comd) Cdim7 -Ddim7
(C7 wt) Caug Daug
(C7 bn) Cm7 D7+9
(Cdim7 dim) Cdim7 Ddim7
注)nはナチュラルマイナー、hはハーモニックマイナー、mはメロディックマイナーを表す。

*****補足説明1
CM7 Dm7の構成音を一つおきに並べると、Cのイオニアン

ド(レ)ミ(ファ)ソ(ラ)シ(ド)

になるというだけのことです。こうすると覚えやすいですし、3度重ねを含むフレーズが作りやすくなります。

dor-2はドリアンの2番目の音を半音下げたもの、loc+2はロクリアンの2番目の音を半音上げたものですが、大して変わりないので、あまり使われないようです。調が変わると経過音も変わるので起きる現象です。

後半(2番目)の和音はテンションノートとアヴォイドノートから成りますが、アヴォイドノートを避けて、テンションノートをランダムに並べるだけでフレーズができてしまうので、役に立つはずです。もちろん、コードトーンを入れても構いません。

少なくとも、アドリブや作編曲には役立つと思います。

もっと根源的には、新しいスケールを創るのに役立つかも知れません。そうすれば新しい音楽が生まれます。


*****補足説明2(作曲の一手法例)-----音楽関連システムを参照のこと
コード進行の生成の仕方について述べます。まず、ハ長調で使われるコードをランダムに並べると次のようになります。 (各調の機能とコードを参照のこと)

((Em7 phr) (FM7 lyd) (Am7 aeo) (-DM7 lyd) (Bdim7 dim) (G7 mix lyd-7 hmp5 alt comd wt) (Fm7 dor) (+Fm7-5 loc) (-D7 lyd-7) (-BM7 lyd) (F7 lyd-7) (B7 alt) (-AM7 lyd) (Dm7-5 loc+2) (Dm7 dor) (CM7 ion) (-A7 lyd-7) (Bm7-5 loc) (-B7 lyd-7))

この後は人間(私)の出番です。ジャズの理論を駆使して(大した理論ではありませんが)、上のコード群をスムーズに繋ぎます。具体的には、セカンダリードミナント、ディミニッシュコード、平行和音、トゥー・ファイブ、4度進行、半音進行、偽終止の導入などで、コード間のギャップを埋めます。これによって、例えば、次のコード進行が作れます。この部分も自動化できればいいのですが、難しいですし、人間がやることがないのもつまらないと思います。ここが個性の見せどころでもあります。(実は基のデータをなくしてしまい、次に示すコード進行は上記コード群とは関係ありません。)

((C "work4")
("CM7" ion) ("+Fm7-5" loc) ("B7" alt) ("E7" hmp5)
("Am7" aeo) ("D7" hmp5) ("Em7" phr) ("A7" hmp5)
("Dm7" dor) ("G7" alt) ("Cm7" dor) ("F7" lyd-7)
("-BM7" lyd) ("CM7" ion) ("+Fm-5" loc) ("B7" alt)
("Em7" phr) ("A7" hmp5) ("Dm7" dor) ("G7" alt)
("+Fm7-5" loc) ("Fm7" dor) ("-B7" lyd-7) ("-Em7" dor)
("Dm7" dor) ("G7" alt) ("CM7" ion) ("D7" hmp5)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("-BM7" lyd)
("A7" hmp5) ("Dm7-5" loc+2) ("G7" alt) ("Em7" phr)
("-Em7" dor) ("-A7" lyd-7) ("-DM7" lyd) ("CM7" ion)
("Fm7" dor) ("-B7" lyd-7) ("-EM7" lyd) ("-AM7" lyd)
("-DM7" lyd) ("-Am7" dor) ("-D7" lyd-7) ("CM7" ion)
("G7" alt) ("+Fm7-5" loc) ("Bm7-5" loc) ("CM7" ion)
("+Fm7-5" loc) ("Bdim7" dim) ("Em7" phr) ("A7" hmp5)
("-A7" lyd-7) ("Dm7" dor) ("G7" alt) ("CM7" ion)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("Fm7" dor)
("CM7" ion)))

次に各コードに対して、コードスケール、UST、テンションノート、などの情報を計算機に列挙させます。(コードの性格と分類を参照のこと)

以上の情報を基に作曲を行うのが基本的パターンです。既に知られている曲のコード進行をそのまま利用することもあります。

上記情報が与えられれば、慣れれば、簡単に作曲できます。この時に、いろいろな音楽知識が使われるのでしょうが、その音楽知識を明示するのは人間にとって難しいことです。明示すること自体、研究課題でしょう。

音楽には数学的アプローチは適さず、記号処理のアプローチが適しているようです。音楽を表現する数学的規則性は見つかっていないと聞いています。いくら統計的に解析しても無駄だそうです。

計算機による支援をするためには、JavaやCなどの通常の言語よりも、記号処理に適したLispのほうが有利ですし、簡潔に記述できます。但し、ハード面は話が別です。作曲の上流工程には明らかにLispが適しており、人工知能の手法が有効であるということです。また、Lispはプロトタイピングに適しており、試行錯誤が容易で、プログラマーの負担が極度に少ないのが特徴です。 私が(三流)音楽家とプログラマーとを両立できるのもLispのお陰なのです。


*****補足説明3(偽終止についてのまとめ)
コード進行を作成するに際して偽終止についてまとめておくと、意外なコード進行を生成することができます。これと私のHPの音楽関連の記事を読んで頂ければ、体系化されていますから、理解の上ならば、作編曲は誰でも可能です。

***一つのコードへ偽終止するドミナントコード群***
(例えばCM7へ偽終止するドミナントコードにはE7,+F7,A7,B7がある)

E7,+F7, A7, B7*******CM7(他C major chords)
A7, B7, D7, E7*******FM7
D7, E7, G7, A7******-BM7
G7, A7, C7, D7******-EM7
C7, D7, F7, G7******-AM7
F7, G7,-B7, C7******-DM7
-B7, C7,-E7, F7*****+FM7
-E7, F7,-A7,-B7******BM7
+G7,+A7,+C7,+D7*****EM7
+C7,+D7,+F7,+G7*****AM7
+F7,+G7, B7,+C7******DM7
B7,+C7, E7,+F7*******GM7

-E7, E7,-B7**********Cm7(他C minor chords)
-A7, A7,-E7**********Fm7
-D7, D7,-A7*********-Bm7
-G7, G7,-D7*********-Em7
B7, C7,+F7**********+Gm7
E7, F7, B7***********+Cm7
A7,+A7, E7**********+Fm7
D7,+D7, A7**********Bm7
G7,+G7, D7**********Em7
C7,+C7, G7**********Am7
F7,-G7, C7**********Dm7
-B7, B7, F7**********Gm7

-D7,-E7,-B7*********Cm7-5
-G7,-A7,-E7*********Fm7-5
B7,-D7,-A7*********-Bm7-5
E7,-G7,-D7*********-Em7-5
A7, B7,+F7*********+Gm7-5
D7, E7, B7*********+Cm7-5
G7, A7, E7*********+Fm7-5
C7, D7, A7**********Bm7-5
F7, G7, D7**********Em7-5
-B7, C7, G7*********Am7-5
-E7, F7, C7*********Dm7-5
-A7,-B7, F7******* *Gm7-5

A7******************C7
D7******************F7
G7*****************-B7
C7*****************-E7
F7*****************-A7
-B7****************-D7
-E7****************-G7
+G7*****************B7
+C7*****************E7
+F7*****************A7
B7******************D7
E7******************G7


***一つのドミナントコードの偽終止先のコード群***

G7***((Em7 phr)(Am7 aeo)(Em7-5 loc)(Am7-5 loc)(-Gm7-5 loc)
     (-EM7 lyd)(-AM7 lyd)(-DM7 lyd)(-BM7 lyd)(-B7 lyd-7)(-Em7 dor))

C7***((Am7 phr)(Dm7 aeo)(Am7-5 loc)(Dm7-5 loc)( Bm7-5 loc)
     (-AM7 lyd)(-DM7 lyd)(+FM7 lyd)(-EM7 lyd)(-E7 lyd-7)(-Am7 dor))

F7***((Dm7 phr)(Gm7 aeo)(Dm7-5 loc)(Gm7-5 loc)( Em7-5 loc)
     (-DM7 lyd)(+FM7 lyd)( BM7 lyd)(-AM7 lyd)(-A7 lyd-7)(+Cm7 dor))

-B7**((Gm7 phr)(Cm7 aeo)(Gm7-5 loc)(Cm7-5 loc)( Am7-5 loc)
     (+FM7 lyd)(BM7 lyd)(EM7 lyd)(-DM7 lyd)(-D7 lyd-7)(+Fm7 dor))

-E7**((Cm7 phr)(Fm7 aeo)(Cm7-5 loc)(Fm7-5 loc)( Dm7-5 loc)
     (BM7 lyd)(EM7 lyd)(AM7 lyd)(+FM7 lyd)(+F7 lyd-7)(Bm7 dor))

-A7**((Fm7 phr)(-Bm7 aeo)(Fm7-5 loc)(-Bm7-5 loc)(Gm7-5 loc)
     (EM7 lyd)(AM7 lyd)(DM7 lyd)(BM7 lyd)(B7 lyd-7)(Em7 dor))

-D7**((-Bm7 phr)(-Em7 aeo)(-Bm7-5 loc)(-Em7-5 loc)(Cm7-5 loc)
     (AM7 lyd)(DM7 lyd)(GM7 lyd)(EM7 lyd)(E7 lyd-7)(Am7 dor))

+F7**((-Em7 phr)(-Am7 aeo)(-Em7-5 loc)(-Am7-5 loc)(Fm7-5 loc)
     (DM7 lyd)(GM7 lyd)(CM7 lyd)(AM7 lyd)(A7 lyd-7)(Dm7 dor))

B7***((-Am7 phr)(+Cm7 aeo)(-Am7-5 loc)(+Cm7-5 loc)(-Bm7-5 loc)
     (GM7 lyd)(CM7 lyd)(FM7 lyd)(DM7 lyd)(D7 lyd-7)(Gm7 dor))

E7***((+Cm7 phr)(+Fm7 aeo)(+Cm7-5 loc)(+Fm7-5 loc)(-Em7-5 loc)
     (CM7 lyd)(FM7 lyd)(-BM7 lyd)(GM7 lyd)(G7 lyd-7)(Cm7 dor))

A7***((+Fm7 phr)(Bm7 aeo)(+Fm7-5 loc)(Bm7-5 loc)(-Am7-5 loc)
     (FM7 lyd)(-BM7 lyd)(-EM7 lyd)(CM7 lyd)(C7 lyd-7)(Fm7 dor))

D7***((Bm7 phr)(Em7 aeo)(Bm7-5 loc)(Em7-5 loc)(+Cm7-5 loc)
     (-BM7 lyd)(-EM7 lyd)(-AM7 lyd)(FM7 lyd)(F7 lyd-7)(-Bm7 dor))


自動作曲システムなどの構築のための音楽豆知識

2022-11-19 15:54:12 | 日記

♪もしも、ジャズが作曲できたら~~
        -自動作曲システムについてー(荒井公康著)      

音楽の好みは人さまざま
  一口に音楽と言っても、クラシック、ジャズ、ロック、ポピュラー、歌謡曲などさまざまなジャンルがあります。そのうち一つのジャンルの音楽をとってみても、多面性があり、音楽のどの面に着目するかは人間のタイプによるようで、音の構成に注目する人、音の醸し出す感じに酔う人、音楽よりは音そのものを好むような人、音楽の背後にある不可解な何かに心を躍らせる人など、人さまざまです。したがって、同じ音楽好き同士で話をしているつもりが、いつの間にかお互いに不可解な人だと思ってしまうようなこともよくあります。
  心理学者のユングは、人間のタイプを思考型・感情型・感覚型・直感型の組み合わせに、外向型・内向型の組み合わせを交叉させている。思考型の人はショパンのマズルカとワルツの区別などの分類や解説に熱中したり、感覚型の人はプレーヤーなどの機械の音質に凝ったりし、直感型の人は音楽そのものを味わう傾向があるそうですが、本当かどうかはわかりません。
  告知性を特性とする言語と異なり、告知性の欠如を特徴とする音楽は、明けの明星と宵の明星を同じものとみなす指示的意味論の立場から見れば、外界に対象物を持たず、音楽の意味とは、霊感に導かれた作曲者の感情・感覚そのものであったり、ハンス・リックによれば「響きつつ動く形式」です。音楽はよく分からないという人もいますが、音楽を聞いた後にあたりを見回して対応するものがなければそれももっともなことで、逆に自分の内面になにか変化を感じとることができれば、十分にその音楽を鑑賞したことになると思います。告知性の欠如は、音楽に安らぎや楽しみを求める者にとって好ましいことです。それ故あらゆる芸術は音楽の状態を憧れると言われるのかも知れません。

音楽の理論性をとらえた自動作曲システム
  一般に、作曲者はかならずしも感性だけに頼って作曲するわけではなく、論理的に作曲することも多く、そこには計算機による自動作曲の可能性があり、そのために「響きつつ動く形式」に関して、計算機に載せられるように形式化する必要があります。具体的なことはここでは述べず、自動作曲システムの背景を説明致します。
  乱数によって計算機に作曲をさせようという試みは計算機の歴史と同じくらい古く、多くの人によって試みられましたが、ほとんど失敗に終わっています。全くでたらめに音列を作っても面白くないのは当然です。計算機の出現以前にも、古くから、サイコロを振って作曲をしようとする試みの歴史は長く、自動作曲は人類の夢のようです。
  自動作曲の一般的な方法は、音楽を確率的なプロセスとみなし、確率・統計的なデータ処理により音楽の構造を決定し、ある音楽における個々の音の出現確率をマルコフチェーンなどの確率関数として求めておき、次にそれに従う乱数を発生させて作曲するものです。これは一種の模倣です。有名なものにイリノイ大学のヒラー、アイザクソンによる弦楽四重奏のためのイリアック組曲(1957)があります。また、最近よく耳にする言葉に1/fノイズという言葉があります。Vossの研究によると、約12時間古典音楽だけを放送する放送局の音響信号の音圧変動を二乗検波したところ、その音響パワーの変動と、音響信号のzero-crossingから求めた音高の変動の、FFTより求めたそれぞれのパワースペクトルの形がある周波数領域で比較的きれいな1/f型になることが示されました。これは、ホワイトノイズとブラウン運動のパワースペクトルの中間であるため、1/fと解析された音楽または1/fノイズにより作曲された音楽はホワイトノイズほど無相関でなく、ブラウン運動ほど相関が強くないので、ちょうど心地よいとの解釈があります。
  これらのことから、乱数を使って作曲するにしても、全くの無秩序では駄目であり、なんらかの制約条件のもとで乱数を発生させる必要があります。私たちの自動作曲システムも乱数を使用していますが、ケーデンスの生成にはある状態遷移図、メロディーの大局的秩序の形成にはコード進行、メロディーの局所的秩序の形成にはコードスケールをそれぞれ制約条件として、乱数を発生させながら、階層的・段階的に作曲を行っています。制約条件として確率関数などのかわりに音楽の知識を直接利用しているのが特色です。この点は人工知能的です。ここでいう音楽の知識とは、主としてジャズの理論のことです。
  ジャズというと米国の黒人の音楽から発達した軽快な音楽ということになっていますが、理論面を見ると、トニック、サブドミナント、ドミナントなどの古典的概念の使用、コード進行のパターン化、コードと様々なコードスケール(旋法の一種)の結合などを特徴としています。トニック、サブドミナント、ドミナントなどは、ある調の音楽における響きの状態を表しています。トニックとは調性を代表する中心的存在であり、開始・終了に用いられることが多く、そのことによって、その性格が強調され、安定感が感じられる状態です。ドミナントとは導音とトライトーン(減5度の音程)を含むコードの集合で表され、これらのコードの響きは不安定で、トニックへの解決を暗示する性格を持っています。サブドミナントはその調性の中で最も開放的で、優美な明るい女性的な性格が感じられる状態です。これらの状態間を遷移して、響きが移り変わると、音楽らしい変化感が生じます。また、これらの状態はコードの集合で表されます。コードとは長音階または短音階の上に3度の間隔で音を3つまたは4つ積み重ねたものですが、クラシックの複雑な曲やジャズではそのまま使われることはあまりなく、転回型やテンションノートと呼ばれるコードスケールからコードの構成音を除いて残った音を含んだ和音が使われます。4度重ねの和音の使用や、テンションノートを利用して、2度、7度、9度の音程を強調するとジャズらしい響きが生じます。また、元のコードの上に、テンションノートを含んだコードを同時に弾く、UST(アッパー・ストラクチャード・トライアド)と呼ばれるものもあります。これは、ちょっと緊張感のある響きになります。9度の音程が強調されるためです。テンションノートをベースにもっていくと、コード構成音のいずれかと7度の音程を作り、これもジャズらしい響きになります。これに、他の音程による微妙なニュアンスが加わります。
  音階とはある民族または地域固有の音楽から、高さの異なる音を抽出し、音高順に並べて、その音楽の構成音を表すもので、すでに統計的処理済みのものです。旋法も同じようなものですが、逆に旋律の型を規制するという意味合いが強くなります。コードスケールも旋法の一種で、特にドミナントの状態は不安定で無調性の感じが強く、全ての音を使うことができ、様々なコードスケールを使用できます。このため、ハ長調の曲のつもりでも、12音すべてが出現し無調にみえることもあります。変な音が出てきたら、ドミナント7thのコードが当てはまり、特殊なコードスケールが使われていると考えて構いません。ちなみに長音階と短音階は中世の教会音楽で使われていた八種類の教会旋法のうちイオニアとエオリア旋法が発展してできたもです。ドミナント7thのコードのところでは、教会旋法(イオニア、ドリア、フリギア、リディア、ミクソリディア、エオリア、ロクリア)以外にも、alt,comd,Hmp5,lyd-7,スパニッッシュなど様々なコードスケールが使えます。但し、規則があります。詳しいことが知りたい方は私たちの教室へお越し下さい。話が逸れましたが、現在でも、長音階と短音階だけでは限界があるため、様々な旋法の多様性を創作に取り入れようとする動きがあります。多様な旋法が長音階と短音階へと収束しましたが、また逆方向の動きが生じているということでしょう。無意識に生じた音階を、作曲家は意識的に旋法と捉え、旋律を規制するわけです。ジャズもこの方向にあります。
  以上のように、ジャズは、コード名、コードスケール名などの記号を多く使う音楽の分野で、人工知能的にみても興味深く、Lispなどの記号処理用プログラミングが適用可能です。
 自動作曲システムで使われているアルゴリズムの一部はLDA(Latent Dirichlet Allocation、潜在的ディリクレ配分法)に似ています。LDAは文章を作るモデルですが、文章が書ければ作編曲も可能だということでしょう。また、LDAを用いて短歌や詩作をするプログラムを作る予定です。
西洋音楽の土壌
  洗練されたジャズを聴くと、サティ、ドビュッシー、ラベル、フォーレなどのフランス近代音楽を思い浮かべます。ジョージ・シアリングのピアノ・ソロやスウィングしていないビル・エヴァンスなどを聴いてみてください。ドイツには、転調の多用、調的崩壊、無調の混乱を経て十二音音楽につながる長短調の機能和声の流れがありました。同じころ、フランスではその系列とは別のグレゴリア聖歌と同じ源を持つ八種類の旋法音楽の土壌がありました。ドビュッシーは旋法の音楽と全音音階の体系的な総合を行い、ラベルは印象主義的な音感に形式的・調性的な古典的な整いを与え、旋法的旋律の流れにも調性的機能を持たせました。こういうと、フランスの音楽とジャズは、理論的に似ているようです。実際そのとおりのようで、「ラウンド・ミッドナイト」という映画を観た人もいるかと思いますが、その映画の中で、デクスター・ゴードン扮するサックス奏者がドビュッシーやラベルからの影響を述べる場面がありました。聴いた感じでも、フランス近代と一部のジャズは共通点が多いようです。


  ANTONIO CARLROS JOBIN(アントニオ・カルロス・ジョビン)の作曲した「イパネマの娘」という曲のジャズの理論による構造をLisp言語のS式で表現すると

     ((FM7 ion) (FM7 ion) (G7 lyd-7) (G7 lyd-7)
     (Gm7 dor)(C7 mix alt comd)(FM7 ion)(Gm7 dor C7 mix alt comd)
     (FM7 ion)(FM7 ion)(F#M7 ion)(F#M7 ion)
     (F#m7 dor)(B7 lyd-7)(AM7 ion)(AM7 ion)
     (Am7 phr dor)(D7 alt hmp5 comd)(B♭M7 lyd ion)(B♭M7 lyd ion)
     (Bm♭7 dor)(E♭7l lyd-7)(Am7 dor phr)(D7 alt hmp5 comd)
     (Gm7 dor)(C7 mix alt comd)(FM7 ion)(FM7 ion)
     (G7 lyd-7)(G7 lyd-7)(Gm7 dor)(C7 mix alt comd)
     (FM7 ion)(Gm7 dor)(C7 mix alt comd)(FM7 ion))

ジャズのミュージシャンはこの表記をもとに即興演奏を行います。その過程をプログラム化すれば自動作曲システムを作ることができます。このような表記を生成するのも興味深いですが、話が長くなりますので、省略します。上の表記の(FM7 ion)のFM7はコード名、ionはコードスケールの名前です。lyd-7などもコードスケールの名前です。コードスケールが複数書いてあるところは、いずれのコードスケールも使用可能です。音階ドレミファソラシドには半音と全音が含まれています。ミとファ、シとドの間は半音、その他の音の間は全音(半音の2倍)になっていることは周知のことと思います。このようにコードスケールの性格はどのように半音と全音が配置されているかによって決定されます。半音は短2度の音程、全音は長2度の音程です。但し、コードスケールによっては短3度の音程を含むものもあります。
  次に簡単に知識表現について述べます。半音の距離を0.5、全音の距離を1.0、短3度の距離を1.5とすることにより、様々なコードスケールを表現することができます。例えば、C ionは

          ド    1.0
          レ    2.0
          ミ    3.0
          ファ   3.5
          ソ    4.5
          ラ    5.5
          シ    6.5

のように数値と対応させておきます。その他のコードスケールとコードも同様に表現しておきます。
  次に上の表記のS式から旋律を生成するには、テンションノートとコードの3度と7度の音をまとめて一つの集合にし、その集合の巾集合を作ります。この巾集合を一つとり、その要素をランダムに任意の個数取り出し、任意にリズムを当てはめることにより、旋律を生成することが可能です。この他、UST(アッパー・ストラクチャード・トライアド)の構成音の集合からも、その巾集合から同様の方法で旋律を生成できます。他の方法の一例として、テンションノートからコードスケールをランダムに回転させ、任意の長さで切断し、任意のリズムを当てはめても旋律になります。この他にも、テンション・リゾルブなど、いろいろあります。詳しく知りたい方は、私たちの教室へお越し下さい。これらの手順を人間が行えば、作曲が行えます。これは機能モードと呼ばれる手法です。
  テンションノートという言葉が出てきましたが、これはコードスケールからコード構成音と1オクターブ上で短9度の音程を作るアヴォイドノートを除いて残った音のことで、C ionではレとラがテンションノートになります。但し、ドミナント7thコードに対しては短9度ができても構いません。9、#11、13を普通のテンションノート、♭9、#9、♭13、#13をオルタードテンションと呼ぶこともあります。また、テンションノートはコードの属性ではなくコードスケールの属性です。したがって、ドミナント7thなどのコードでは、どのコードスケールを使用するかによって、テンションノートは異なってきます。一般にドミナント7thコードが解決する時のテンション及びコードスケールは次のようになります。

    A)メージャー系のコードに解決する時は、mix, lyd-7, alt, comd
    B)マイナー系のコードに解決する時は、hmp5, alt, comd
    C)半音下降で解決する時は、lyd-7

alt, comdは調性をあまり感じさせません。その他のコードついては、あまりコードスケールの選択の余地はなく、ほとんどの場合、一意に決まってしまいます。少し面倒な感じがするかも知れませんが、要は慣れです。
  テンションノートについても、コードとコードスケールと同様の知識表現をします。テンションノートは旋律の重要な要素ですから、覚えておきましょう。
  以上、コード、コードスケール、テンションノートをしっかり表現し、把握していれば、旋律を作ることは自由自在です。生成された旋律が単純であれば、アプローチノート、イ音、逸音、経過音、補助音、刺繍音、係留音、先行音など用いて更に変化させることができます。この考え方はアドリブにつながります。
  クラシックの理論では、テンションノートを適切に表現できないので、このような手法では自動作曲は行えません。クラシックでは、そこを人間の感性で補っているところがあります。
  以上の方法で生成された旋律は、何かを手本にしたわけではないので、全くオリジナルなものになります。この理論をもとに作った自動作曲システムに関しては、情報処理学会第41回(平成2年於東北大学)全国大会で「カデンツの一般化およびコードスケールを考慮した自動作曲」という表題で発表しました。参考文献としては、飯田敏彦著「やさしく学べるジャズハーモニー 1、2 (コード進行の発展及びヴォイシングとアドリブ)」(全音楽譜出版社)などがあります。ジャズの教科書は大体同じような内容のものが多いようです。このシステムはNHKや新聞などでも報道されました。


補足1:ピッチクラス集合論との関係

ピッチクラス集合論では、次のように定義されます。

ある2つの音があって、その周波数がx,aであるとする。このとき、X=(2^n)aとなるような整数nが存在するとき、x,aはオクターブに関して同値であるといい、x~aとあらわす。ここで、{x|x~a}であらわされる集合をピッチクラスといい、これには整数による音名を与えることにする。

具体的には次のような対応をとります。私のシステムでの対応も示します。

ピッチクラス値   私のシステム   音名(平均律)
----0-------------1.0--------------ド
----1-------------1.5-----------ド♯ レ♭
----2-------------2.0--------------レ
----3-------------2.5-----------レ♯ ミ♭
----4-------------3.0--------------ミ
----5-------------3.5--------------ファ
----6-------------4.0-----------ファ♯ ソ♭
----7-------------4.5--------------ソ
----8-------------5.0-----------ソ♯ ラ♭
----9-------------5.5--------------ラ
---10-------------6.0-----------ラ♯ シ♭
---11-------------6.5--------------シ

ピッチクラス集合論では、周波数についての物理的モデルに基づいて対応を取っていますが、私のような対応を取っても、代数的には同じことです。

以上の対応を取れば、調性の音楽でも、無調の音楽でも、同様の扱いが可能です。  


補足2:コード進行生成手法例と作曲法

コード進行の生成の仕方について述べます。まず、ハ長調で使われるコードをランダムに並べると次のようになります。

((Em7 phr) (FM7 lyd) (Am7 aeo) (-DM7 lyd) (Bdim7 dim) (G7 mix lyd-7 hmp5 alt comd wt) (Fm7 dor) (+Fm7-5 loc)
(-D7 lyd-7) (-BM7 lyd) (F7 lyd-7) (B7 alt) (-AM7 lyd) (Dm7-5 loc+2) (Dm7 dor) (CM7 ion) (-A7 lyd-7)
(Bm7-5 loc) (-B7 lyd-7))

この後は人間(私)の出番でする。ジャズの理論を駆使して(大した理論ではないが)、上のコード群をスムーズに繋ぎます。具体的には、セカンダリードミナント、ディミニッシュコード、平行和音、トゥー・ファイブ、4度進行、半音進行、偽終止の導入などで、コード間のギャップを埋めます。これによって、例えば、次のコード進行が作れます。(実は基のデータをなくしてしまい、次に示すコード進行は上記コード群とは関係ありません。)

((C "work4")
("CM7" ion) ("+Fm7-5" loc) ("B7" alt) ("E7" hmp5)
("Am7" aeo) ("D7" hmp5) ("Em7" phr) ("A7" hmp5)
("Dm7" dor) ("G7" alt) ("Cm7" dor) ("F7" lyd-7)
("-BM7" lyd) ("CM7" ion) ("+Fm-5" loc) ("B7" alt)
("Em7" phr) ("A7" hmp5) ("Dm7" dor) ("G7" alt)
("+Fm7-5" loc) ("Fm7" dor) ("-B7" lyd-7) ("-Em7" dor)
("Dm7" dor) ("G7" alt) ("CM7" ion) ("D7" hmp5)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("-BM7" lyd)
("A7" hmp5) ("Dm7-5" loc+2) ("G7" alt) ("Em7" phr)
("-Em7" dor) ("-A7" lyd-7) ("-DM7" lyd) ("CM7" ion)
("Fm7" dor) ("-B7" lyd-7) ("-EM7" lyd) ("-AM7" lyd)
("-DM7" lyd) ("-Am7" dor) ("-D7" lyd-7) ("CM7" ion)
("G7" alt) ("+Fm7-5" loc) ("Bm7-5" loc) ("CM7" ion)
("+Fm7-5" loc) ("Bdim7" dim) ("Em7" phr) ("A7" hmp5)
("-A7" lyd-7) ("Dm7" dor) ("G7" alt) ("CM7" ion)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("Fm7" dor)
("CM7" ion)))

次に各コードに対して、コードスケール、UST、テンションノート、などの情報を計算機に列挙させます。

以上の情報を基に作曲を行うのが私の基本的パターンです。既に知られている曲のコード進行をそのまま利用することもあります。

上記情報が与えられれば、慣れれば、簡単に作曲できます。この時に、いろいろな音楽知識が使われるのでしょうが、その音楽知識を明示するのは人間にとって難しいことです。暗黙知と呼ばれるものを明示すること自体、研究課題でしょう。


補足3:旋律の生成アルゴリズム

対(コード、コードスケール)の適当な列を与えた場合、最も単純な旋律生成アルゴリズムには次の二つのものがあります。

1.ガイドトーンとテンション・ノートをランダムに配置する。
2.テンション・ノートからコード・スケールを適当に回転させる。

1.2.の応用として、次のアルゴリズムも有効であることが判明しています。

アルゴリズム
A.ガイドトーンとテンション・ノートからランダムに一つの音を選ぶ。
B.その音がガイドトーンならばそのまま旋律の要素にする。
C.その音がテンション・ノートならば音程を上下させコード・トーンに解決させる。(テンション・リゾルブである) (解決しなくとも、そのまま伸ばしてもよい)
D.(A.B.C.)を繰り返し適当な長さになるまで繰り返す。

以前はA.の段階でガイドトーンの代わりにコード・トーンを使用していたが上手くいきませんでした。また上のアルゴリズムではガイドトーン以外のコード・トーンも出現し、多様な旋律を生成できます。ワルツの作曲も可能です。ガイドトーンとはコードの3度と7度の音のことです。

自動作曲システムで使われているアルゴリズムの一部はLDA(Latent Dirichlet Allocation、潜在的ディリクレ配分法)に似ています。LDAは文章を作るモデルですが、文章が書ければ作編曲も可能だということでしょう。また、LDAを用いて短歌や詩作をするプログラムを作る予定です。


補足4:("CM7" ion)の意味について

 単なるデータと知識とはどう違うのだろうか。何故、私は自分の音楽関連システムを知識システムと呼ぶのか。音楽を作る場合、自動作曲であろうと自分で作曲する場合であろうと、知識が必要である。例えば、コードネーム CM7 が表す構成音などは知識と言うよりもデータに近く、いくらこのようなデータを集めても、音楽を作ることはできない。知識とはデータを整理して、データ同士の関係を定めたものである。
 ("CM7" ion)という表記は、一般には C ionian と表記されることが多い。この表記から CM7がハ長調のトニックであり、適用されるコードスケールは C(ド)から始まる ionian (つまり、ドレミファソラシド)であることを計算機に理解させることができる。注意すべきことは、人間が理解するのではなく、計算機が理解するということである。人間であれば、C ionian と表記されていれば、使われるコードは CM7 C69 C6 C などであることは、慣れれば分かることなのであるが、これを計算機に判断させる手続きは複雑になるので、私は("CM7" ion)という表記を用いている。("CM7" ion)という表記は知識を表しているのである。また、CM7の場合、可能なコードとコードスケールの組み合わせは("CM7" ion) ("CM7" lyd)の2通りしかないことも知られている。("CM7" dor)とか("CM7" alt)などはあり得ない。また、("CM" ion)と表記されていれば、USTは G Am Emであることも計算機に理解させることができる。またテンションノートがレとラであることも表現できる。
 例えば、5小節に亘る("Em7" phr)("A7" hmp5)("Dm7" dor) ("G7" alt)("CM7" ion)はより具体的に次のような表記と考えてもよいが、簡潔でない。
  (コード:Em7(ミソシレ)、コードスケール:phr(ミファソラシドレミ))
  (コード:A7(ラ#ドミソ)、コードスケール:hmp5(ラ♭シ#ドレミファソラ))
  (コード:Dm7(レファラド)、コードスケール:dor(レミファソラシドレ))
  (コード:G7(ソシレファ)、コードスケール:alt(ソ♭ラ♭シシ♭レ♭ミファソ))
  (コード:CM7(ドミソシ)、コードスケール:ion(ドレミファソラシド))
このような表記から、人間の持つ暗黙知ないしヒューリスティックスによって、メロディーを生成させることが可能である。このような組み合わせも(音楽)知識と考えてよく、様々な歌曲(主にジャズ)の構造がこのような組み合わせで表現されることが知られている。
 このように、私の音楽関連システムは自然言語ではなく、記号によって知識表現を行っているので、分かりにくいのかも知れないが、一種のエキスパートシステムになっているのである。音楽知識をコード名とコードスケール名の組み合わせで整理するのにはかなりの時間を要した。


補足5:人工知能との関連

 ゲーデルの数学的実在論と関係あるのだが、私が作った自動作曲システムを構成する、音楽で使われる記号、ひいては音楽の記号体系はどこにあるのだろうか?これらは、人間の脳内にあるのではない。あくまで、外界に実在するもので、記憶として一部脳内にあるに過ぎないのではないか。音楽自体も音楽の記号体系も、外界にあり、双方に対して、人間の脳は解釈系として機能する。
 世界内の存在を解釈する時に、人間は自分の知識に基いて解釈すると考え勝ちだが、あくまで、知識は人間の外界にある(あった)ものであり、人間の解釈対象は「存在自体」と「理論や知識」に二重化されているのではないか。存在を記号体系化したものが理論や知識であり、存在理解とは存在自体の記号体系に対する解釈である。記号体系は教育や観察・発見によってもたらされる。人間は存在を直に解釈するのではなく、存在を表すとされる記号体系を解釈するのではないか。そして、その記号体系は外界と記憶として脳内に存在する。
 Dijkstara(1972)の次の言葉がある。プログラミング言語Lispに関するものである。
 「Lispは冗談に『計算機を誤用するための最も賢い方法』であると言われてきた。この描写は大変な賛辞であると思う。この言葉によってLispの持つ完全に自由な雰囲気が伝わってくるからであるーーーーLispは、われわれの最も才能のある人々が、以前は不可能であった思考を行う手助けをしてきたのである。」
 Lispは、マッカーシーがリスト・データ構造の基本要素を極限まで簡略化し、その上の計算モデルを計算の理論で知られるラムダ計算に基いて構成し、設計したプログラミング言語である。いずれにせよ、記号の取り扱いや記号を組み合わせて複雑な知識を表現し、計算機上でそれらを操作するのに適した言語である。
 私は自分の作った自動作曲システムのことを言うのは、自慢するためではなく、他に経験も業績もないのと、今考えてみれば、古典的記号主義、計算主義に立ったシステムであるからである。私は自動作曲システムを作るのに、音楽を分析したのではなく、ジャズ理論の記号体系を分析し、それを応用したからである。私には音楽理論は分かるが、音楽が理解できるという自信はない。
 黒崎政男によると、ライプニッツは普遍記号学を構想し、ホッブスの「思考するとは計算することである」というテーゼを発展させ、「思考のアルファベット」たる少数の基本概念から、計算という記号操作によってすべての真理を演繹的の構築しようとしていた。つまりそれは、記号体系が特にうまく作られたならば、記号間の関係や秩序が、事物間の関係や秩序に対応する、という発想に基いており、記号の側の操作だけで事実や事象の知識に到達しようというものであった。この普遍記号学、およびこの記号主義と感覚、直感などの連関をめぐるライプニッツの思索は、今日のAI(人工知能)の計算主義をめぐる議論の原型をなしており、AIの根本問題に対する貴重な示唆を与えている。
  このライプニッツの説は、記号体系をジャズの理論体系とすれば、音楽という事象について、そのまま当てはまる。音楽を知らずとも、ジャズの理論で使われる記号を操作するだけで、作曲編曲なども可能であるということである。これは、記号操作の主体が、人間であろうと計算機であろうと、変わらない事実である。
 古典的人工知能の考え方は次のようなものである。
 心の構造を知識の構造と考え、さらに知識は記号の形式系として最もよく表現されると考える。認知は記号として表象された知識の上での形式的操作として理解される。古典的人工知能のパラダイムを特徴付けるためには計算主義に基く必要がある。
 古典的人工知能を特徴付ける計算主義では、知識は常にそれがどのように用いられるかという、処理過程の観点から扱われ、知識の表現ないし記述は、知識処理のアルゴリズムと不可分の関係にある。知識表現の方式として現在の人工知能で常用されている、意味ネットワーク、フレーム、プロダクション規則、論理式などいずれでも、知識を要素とその組み合わせからなる記号で表現し、それらを操作するための形式的規則/アルゴリズムを定義すると、知識の計算が実現する。記号で表現された要素が、心的構造においては概念、命題などに対応し、その上での操作(計算)が、認知、思考、推論、理解、記憶などに対応する。
 知識、ひいては心の本質は、形式的操作の対象となるような「記号」の概念でとらえることができる、という主張に対しては批判がある。その批判の多くは、人間の知識や認知のもつ状況依存性や身体性、イメージ性、アナログ性、技能性などに関わるもので、こうした批判を建設的に取り込んで、より豊かな記号概念にたつ古典的人工知能が十分に可能であると主張されている。
 古典的計算主義に対する克服は、コネクショニズムに基く計算観で試みられている。概念の分散表現の考え方は、記号なき知識表現を可能にするもので、古典的な知識観に対する改変をせまっている。

 

論理代数(ブール代数)と実験計画法への多変量非線形解析2

2022-11-19 15:50:44 | 日記

(荒井公康著)

 論理関数の基本的なものに論理和OR、論理積AND、排他的論理和E-ORなどがある。2変数の場合、

  論理和OR          論理積AND   
  A  B  A∨B      A  B  A∧B
  1  1   1       1  1   1
  1  0   1       1  0   0
  0  1   1       0  1   0
  0  0   0       0  0   0

  排他的論理和 E-OR
  A  B   A ●B
  1  1   0
  1  0   1
  0  1   1
  0  0   0

  含意→(ならば)
      A  B  A→B
      1  1    1
      1  0    0
      0  1    1
      0  0    1

含意の論理関数は理解しにくいかも知れないが、A→Bは「(Aでない)∨B」や、「A∧(Bでない)」ことはない、などに翻訳できる。これらの論理関数は通常の四則演算で表すことができる。(ブール環)

   A∨B=a+b-ab   A∧B=ab  A●B=a+b-2ab   A→B = 1-a+b-(1-a)b = -a+ab+1

次に、変数の数を増やしていく。
   A∨B∨C=a+b+c-ab-bc-ca+abc
   A∨B∨C∨D=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+acd+abd+bcd-abcd
    ・・・・・・・・・

   A●B●C=a+b+c-2ab-2ac-2bc+4abc
   A●B●C●D=a+b+c+d-2ab-2ac-2ad-2bc-2bd-2cd+4abc+4acd+4abd+4bcd-8abcd
    ・・・・・・・・

   A∧B∧C=abc

これらが成立していることは容易に確かめられるが、直接証明するのは難しい。しかも、任意の論理関数に応用するのに役立たない。一般にn変数では2のn乗個の項が出てくるが、これらの項の係数を別の方法で求めることを考える。排他的論理和の場合、

n=2の時
   a  b  ab         a●b
   1 1 1 1  a1      0
   1 0 0 1  a2  =  1
   0 1 0 1  a3      1
   0 0 0 1  a4     0
     ↑     ↑
    行列   項の未知係数

この連立方程式を解く(この連立方程式はそのままでは解けない。重回帰分析の場合と同じように正規方程式を求めると解ける)と、a1=1,a2=1,a3=-2,a4=0となり、確かに
   
   a●b=a+b-2ab

となっていることがわかる。同じ手法で任意の多変数論理関数を加減乗法で表現できる。下に示したLispプログラムは4変数の場合の任意の論理関数の計算式を求めるためのものである。例えば次のような出鱈目な論理関数に対して次の計算式が得られる。

    a  b  c  d         論理関数F
    0 0 0 0            1
    0 0 0 1            0
    0 0 1 0            1
    0 0 1 1            1
    0 1 0 0            1
    0 1 0 1            1
    0 1 1 0            0
    0 1 1 1  →         1
    1 0 0 0            0
    1 0 0 1            0
    1 0 1 0            0
    1 0 1 1            1
    1 1 0 0            0
    1 1 0 1            1
    1 1 1 0            0
    1 1 1 1            1

論理関数Fは、なんと
    
    F=-a-d+ad-bc+bd+cd+abc-abcd+1.0

と表される。このような論理関数の種類は 2^(2^4) = 65536 通りある(4変数の場合)。これはニューラル・ネットワークが行っていること等価である。学習時間は現実には必要ない利点もある。応用範囲は極めて広いものと考えられる。

今までは、変数値も論理関数値も1、0の値に限っていたが、実数値に拡張することにより、任意の多変数非線形関数を近似的に表現可能である。多変数非線形関数の最適化という難問にもぶつかるが、私は個人的に材料開発において材料特性と組成成分の関係をこの方式で求め、最適化によって成果を挙げた経験がある。

読者諸氏の経験に基づいて、応用されることを希望する。数学的にも面白いテーマであり、更に考察を進めるつもりである。

これに対して、

   F = A1a+A2b+A3c+A4d+A5  (A1~A5は定数)

の如き回帰式で近似しようとするのは、間違いである。また、変数 a,b,c,d 以外の変数は自然科学では厳密に固定できるが、人間や社会を対象とした場合は、そのような理想化は不可能である。ある要因について調べているつもりでも他の考慮外の要因の効果の排除は原理的に不可能である。言い換えれば、人間や社会に対しては一つの要因について偏微分することは不可能なのである。また要因間には相互作用があり、一つの要因を調べれば、多数の他の要因が関与してきて、どの要因が関与しているかの正確な把握は、人間や社会を対象とした場合、不可能である。


;;;
;;; c:\\program files\\acl62\\kaiki.cl
;;;
(defun read-sentence ()
  (let ((input (make-string-input-stream (read-line))))
   (unwind-protect
     (progn
       (do ((word (read input nil) (read input nil))
          (sentence nil))
         ((not word) (return (reverse sentence)))
        (push word sentence)))
    (close input))))

(defun set-data ()
  (setf a (make-array '(16 16) :initial-element nil))
  (setf a2 (make-array '(16 17) :initial-element nil))
  (setf b (make-array '(16 1) :initial-element nil))
  (setf n (make-array '(16 1) :initial-element nil))

  (setf (aref n 0 0) 'a)
  (setf (aref n 1 0) 'b)
  (setf (aref n 2 0) 'c)
  (setf (aref n 3 0) 'd)
  (setf (aref n 4 0) 'ab)
  (setf (aref n 5 0) 'ac)
  (setf (aref n 6 0) 'ad)
  (setf (aref n 7 0) 'bc)
  (setf (aref n 8 0) 'bd)
  (setf (aref n 9 0) 'cd)
  (setf (aref n 10 0) 'abc)
  (setf (aref n 11 0) 'acd)
  (setf (aref n 12 0) 'abd)
  (setf (aref n 13 0) 'bcd)
  (setf (aref n 14 0) 'abcd)
  (setf (aref n 15 0) "")

;;;        a             b             c            d
  (setf (aref a 0 0) 0) (setf (aref a 0 1) 0) (setf (aref a 0 2) 0) (setf (aref a 0 3) 0)
  (setf (aref a 1 0) 0) (setf (aref a 1 1) 0) (setf (aref a 1 2) 0) (setf (aref a 1 3) 1)
  (setf (aref a 2 0) 0) (setf (aref a 2 1) 0) (setf (aref a 2 2) 1) (setf (aref a 2 3) 0)
  (setf (aref a 3 0) 0) (setf (aref a 3 1) 0) (setf (aref a 3 2) 1) (setf (aref a 3 3) 1)
  (setf (aref a 4 0) 0) (setf (aref a 4 1) 1) (setf (aref a 4 2) 0) (setf (aref a 4 3) 0)
  (setf (aref a 5 0) 0) (setf (aref a 5 1) 1) (setf (aref a 5 2) 0) (setf (aref a 5 3) 1)
  (setf (aref a 6 0) 0) (setf (aref a 6 1) 1) (setf (aref a 6 2) 1) (setf (aref a 6 3) 0)
  (setf (aref a 7 0) 0) (setf (aref a 7 1) 1) (setf (aref a 7 2) 1) (setf (aref a 7 3) 1)
  (setf (aref a 8 0) 1) (setf (aref a 8 1) 0) (setf (aref a 8 2) 0) (setf (aref a 8 3) 0)
  (setf (aref a 9 0) 1) (setf (aref a 9 1) 0) (setf (aref a 9 2) 0) (setf (aref a 9 3) 1)
  (setf (aref a 10 0) 1) (setf (aref a 10 1) 0) (setf (aref a 10 2) 1) (setf (aref a 10 3) 0)
  (setf (aref a 11 0) 1) (setf (aref a 11 1) 0) (setf (aref a 11 2) 1) (setf (aref a 11 3) 1)
  (setf (aref a 12 0) 1) (setf (aref a 12 1) 1) (setf (aref a 12 2) 0) (setf (aref a 12 3) 0)
  (setf (aref a 13 0) 1) (setf (aref a 13 1) 1) (setf (aref a 13 2) 0) (setf (aref a 13 3) 1)
  (setf (aref a 14 0) 1) (setf (aref a 14 1) 1) (setf (aref a 14 2) 1) (setf (aref a 14 3) 0)
  (setf (aref a 15 0) 1) (setf (aref a 15 1) 1) (setf (aref a 15 2) 1) (setf (aref a 15 3) 1)

;;; 定数項
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 15) 1))

;;; ab
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 4) (* (aref a i 0) (aref a i 1))))

;;; ac
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 5) (* (aref a i 0) (aref a i 2))))

;;; ad
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 6) (* (aref a i 0) (aref a i 3))))

;;; bc
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 7) (* (aref a i 1) (aref a i 2))))

;;; bd
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 8) (* (aref a i 1) (aref a i 3))))

;;; cd
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 9) (* (aref a i 2) (aref a i 3))))

;;; abc
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 10) (* (aref a i 0) (aref a i 1) (aref a i 2))))

;;; acd
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 11) (* (aref a i 0) (aref a i 2) (aref a i 3))))

;;; abd
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 12) (* (aref a i 0) (aref a i 1) (aref a i 3))))

;;; bcd
  (do ((i 0 (1+ i)))
     ((> i 15))
   (setf (aref a i 13) (* (aref a i 1) (aref a i 2) (aref a i 3))))

;;; abcd
  (do ((i 0 (1+ i)))
     ((> i 15))
    (setf (aref a i 14) (* (aref a i 0) (aref a i 1) (aref a i 2) (aref a i 3))))

;;;
;;;
;;;
  (do ((j 0 (1+ j)))
     ((> j 15))
    (do ((i 0 (1+ i))
       (s 0))
       ((> i 15) (setf (aref a2 0 j) s))
      (setf s (+ s (aref a i j)))))

;;;
;;;
;;;
  (do ((l 0 (1+ l)))
     ((> l 14))
    (do ((j 0 (1+ j)))
       ((> j 15))
      (do ((i 0 (1+ i))
         (s 0))
         ((> i 15) (setf (aref a2 (1+ l) j) s))
        (setf s (+ s (* (aref a i l) (aref a i j))))))))

;;;
;;;
;;;
(defun input-1-or-0 ()
  (do ((i 0 (1+ i)))
     ((> i 15))
   (format t "~%No.~a~%" (1+ i))
   (setf (aref b i 0) (car (read-sentence)))))

(defun solve-aux ()
  (input-1-or-0)
  (do ((i 0 (1+ i))
     (s 0))
     ((> i 15) (setf (aref a2 0 16) s))
    (setf s (+ s (aref b i 0))))
  (do ((l 0 (1+ l)))
     ((> l 14))
    (do ((i 0 (1+ i))
       (s 0))
       ((> i 15) (setf (aref a2 (1+ l) 16) s))
      (setf s (+ s (* (aref a i l) (aref b i 0)))))))

(defun convert-l-to-a ()
  (prog ()
    (set-data)
    (solve-aux)
    (do ((k 0 (1+ k)))
       ((> k 15))
      (setf w (aref a2 k k))
      (setf k1 (1+ k))
      (do ((j k1 (1+ j)))
         ((> j 16))
        (setf (aref a2 k j) (/ (aref a2 k j) w)))
      (do ((i 0 (1+ i)))
         ((> i 15))
        (cond ((not (equal i k))
             (setf w (aref a2 i k))
             (do ((j k1 (1+ j)))
                ((> j 16))
               (setf (aref a2 i j) (- (aref a2 i j) (* (aref a2 k j) w))))))))
    (do ((i 0 (1+ i)))
       ((> i 15))
      (format t "~%No.~a ~a~a" (1+ i) (float (aref a2 i 16)) (aref n i 0))))


ここで実験計画法への分散分析に替わる回帰分析の応用を考える。一部実施計画で直交表L16(2-15)を用いた場合に、全ての交互作用が求まるように実験の割り付けを行うと、次のような実験配置になる。

    a    b    c   d   e        実験結果No.
    0   0   0   0   0          1
    0   0   0   1   1          2
    0   0   1   0   1          3
    0   0   1   1   0          4
    0   1   0   0   1          5
    0   1   0   1   0          6
    0   1   1   0   0          7
    0   1   1   1   1          8
    1   0   0   0   1          9
    1   0   0   1   0          10
    1   0   1   0   0          11
    1   0   1   1   1          12
    1   1   0   0   0          13
    1   1   0   1   1          14
    1   1   1   0   1          15
    1   1   1   1   0          16

この実験配置に対して、上のプログラムを少し修正して計算すると次の形の回帰式が得られる。

  実験結果=A1a+A2b+A3c+A4d+A5e+A6ab+A7ac+A8ad+A9ae+A10bc+A11bd+A12be+A13cd+A14ce+A15de+A16

係数A1からA16は次のプログラムで求まる。

10 'The name of this program is L16
20 CLS :SCREEN 4
30 LOCATE 5,5 :INPUT "Enter the name of data." A$
40 N=16
50 M=15
60 DIM B(50),R(50,25),A(50,25),B$(50),C(50,25)
70 X=16
80 '
90 FOR I=1 TO 16 :A(I,16)=1 :NEXT I
100 A(1,1)=0:A(1,2)=0:A(1,3)=0:A(1,4)=0:A(1,5)=0
110 A(2,1)=0:A(2,2)=0:A(2,3)=0:A(2,4)=1:A(2,5)=1
120 A(3,1)=0:A(3,2)=0:A(3,3)=1:A(3,4)=0:A(3,5)=1
130 A(4,1)=0:A(4,2)=0:A(4,3)=1:A(4,4)=1:A(4,5)=0
140 A(5,1)=0:A(5,2)=1:A(5,3)=0:A(5,4)=0:A(5,5)=1
150 A(6,1)=0:A(6,2)=1:A(6,3)=0:A(6,4)=1:A(6,5)=0
160 A(7,1)=0:A(7,2)=1:A(7,3)=1:A(7,4)=0:A(7,5)=0
170 A(8,1)=0:A(8,2)=1:A(8,3)=1:A(8,4)=1:A(8,5)=1
180 A(9,1)=1:A(9,2)=0:A(9,3)=0:A(9,4)=0:A(9,5)=1
190 A(10,1)=1:A(10,2)=0:A(10,3)=0:A(10,4)=1:A(10,5)=0
200 A(11,1)=1:A(11,2)=0:A(11,3)=1:A(11,4)=0:A(11,5)=0
210 A(12,1)=1:A(12,2)=0:A(12,3)=1:A(12,4)=1:A(12,5)=1
220 A(13,1)=1:A(13,2)=1:A(13,3)=0:A(13,4)=0:A(13,5)=0 
230 A(14,1)=1:A(14,2)=1:A(14,3)=0:A(14,4)=1:A(14,5)=1
240 A(15,1)=1:A(15,2)=1:A(15,3)=1:A(15,4)=0:A(15,5)=1
250 A(16,1)=1:A(16,2)=1:A(16,3)=1:A(16,4)=1:A(16,5)=0
260 FOR I=1 TO 16
270    A(I,6)=A(I,1)*A(I,2)
280    A(I,7)=A(I,1)*A(I,3)
290    A(I,8)=A(I,1)*A(I,4)
300    A(I,9)=A(I,1)*A(I,5)
310    A(I,10)=A(I,2)*A(I,3)
320    A(I,11)=A(I,2)*A(I,4)
330    A(I,12)=A(I,2)*A(I,5)
340    A(I,13)=A(I,3)*A(I,4)
350    A(I,14)=A(I,3)*A(I,5)
360    A(I,15)=A(I,4)*A(I,5)
370 NEXT I
380 B$(1)=" 1" :B$(2)=" 2" :B$(3)=" 3" :B$(4)=" 4"
390 B$(5)=" 5" :B$(6)=" 6" :B$(7)=" 7" :B$(8)=" 8"
400 B$(9)=" 9" :B$(10)="10" :B$(11)="11" :B$(12)="12"
410 B$(13)="13" :B$(14)="14" :B$(15)="15" :B$(16)="16"
420 FOR I=1 TO 16
430    PRINT "B(";I;")=";:INPUT B(I)
440 NEXT I
450 FOR J=1 TO 16
460     S=0
470     FOR I=1 TO 16 :S=S+A(I,J) :NEXT I
480     R(I,J)=S
490 NEXT J
500 '
510 FOR L=1 TO 15
520     FOR J=1 TO 16
530     S=0
540     FOR I=1 TO 16 :S=S+A(I,L)*A(I,J) :NEXT I
550     K=L+1 :R(K,J)=S
560     NEXT J
570 NEXT L
580 S=0
590 FOR I=1 TO 16 :S=S+B(I) :NEXT I
600 R(1,17)=S
610 FOR L=1 TO 15
620     S=0
630     FOR I=1 TO 16 :S=S+A(I,L)*B(I) :NEXT I
640     K=L+1 :R(K,17)=S
650 NEXT L
660 '
670 FOR K=1 TO 16
680    W=R(K,K)
690    K1=K+1
700    FOR J=K1 TO 17
710        R(K,J)=R(K,J)/W
720    NEXT J
730    FOR I=1 TO 16
740        IF I=K THEN 790
750        W=R(I,K)
760        FOR J=K1 TO 17
770            R(I,J)=R(I,J)-R(K,J)*W
780        NEXT J
790    NEXT I
800 NEXT K
810 CLS
820 PRINT "*****";A$;"*****"
830 PRINT "A(n,1)X(1)+A(n,2)X(2)+ ........ +A(n,m-1)X(m-1)+A(n,m)X(m)+A(n,m+1)"
840 PRINT " A(1) A(2) A(m-1) A(m) A(m+1)
850 PRINT " m=";16
860 FOR I=1 TO 16 :PRINT "A(";I;")=";R(I,17) :NEXT I
870 END


ここでA1~A16は計算によって得られる定数である。こうして得られた実験式は忠実に実験結果を反映しており、最急傾斜法や遺伝的アルゴリズム(GA)などの非線形最適化手法を適用することにより、実験対象の特性の制御に有効に使える。また要因間の相互作用も明らかになり、分析的にも有意義である。要因 a を単位当たり動かした時の効果は上式を a で偏微分すればよい。計算式Faは

   Fa=A1+A6b+A7c+A8d+A9e

となる。A6,A7,A8,A9はそれぞれ要因 a と要因 b,c,d,eとの相互作用の大きさの目安となる。同様にbの場合はFb=A2+A6a+A10c+A11d+A12e、cの場合はFc=A3+A7a+A10b+A13d+A14e、dの場合はFd=A4+A8a+A11b+A13c+A15e、eの場合はFe=A5+A8a+A12b+A14c+A15dが偏微分値である。この場合、最急傾斜法による最適化方向は、5次元ベクトル(Fa Fb Fc Fd Fe)で表される。

以上は脳のモデルとされる神経回路網を数学的に見直したものである。要因ないし変数を一個の神経細胞と見なせば脳はこのようなアナログのネットワークから構成されており、デジタルを含む世界を弁別するように自己組織化するものと思われる。係数は正負の値を取り、神経細胞間の結合の強さの目安である。今までの計算はアナログとデジタルを結び、論理と代数をつなぐものである。

以上は数式を使って計算することは、論理的に思考することに等しいことを示す一例である。計算には論理が組み込まれているのである。


「分子構造から生理活性を予測する一般的な手法として、定量的構造活性相関(QSAR)解析法が知られている。QSAR解析では分子構造から得られる多様な数値情報(分子記述子)と酵素活性のような生理活性との間の相関性・関連性を統計的に解釈することによって重回帰モデルに代表される数理モデルを構築する。近年では記述子と生理活性の間の非線形な関係を人工知能によるパターン認識よって解析し、より高精度な性能を有する予測モデルを構築したとする報告が増加している。」(植沢芳広「化学と工業2022年3月号)このような分野で、私の数学「論理代数(ブール代数)の多変量非線形重回帰分析」が役立つと思う。2022/04/04

この他、セラミックス、合金、触媒、複合材料など要因間に相互作用があり、特性と複数の要因間との関数関係が非線形になるような場合にも「論理代数(ブール代数)の多変量非線形重回帰分析」の手法が有効であると思う。2022/04/05

もう新しいことにはついていけないし、ついていく気力も失せた年齢なのであるが、頑張って、涌井良幸・涌井貞美著「ディープラーニングがわかる数学入門」(技術評論社)を読んでみた。仕事でAI関連をやっていたことがあるので、最近のAIの動向には興味がある。最小二乗法の考え方が分かれば理解できる内容であった。標本と予測値の誤差が最小になるようにパラメータを設定するという基本的で単純な考え方で最先端の深層学習も成り立っている。パラメータの数が膨大になるので誤差逆伝搬の手法が使われるのが、同じ最小二乗法を使う回帰分析などとの違いだ。考え方は単純なのだが、問題設定などが複雑で煩雑になるという印象を受けた。しかし、ディープラーニングの威力にはおどろかされるが、パターン認識などの領域に限られるようだ。2022/04/04


付論5 ブール代数&神経回路網(ニューラルネットワーク)
以下、a,b,c,dは0または1の値をとる論理変数とする。また、次のように基底項を定義する。
n=2(変数の数が2の場合)の時
{a b ab}
n=3(変数の数が3の場合)の時
{a b c ab ac bc abc}
n=4(変数の数が4の場合)の時
{a b c d ab ac ad bc bd cd abc abd acd bcd abcd}
このように基底項を定義すると任意のブールの論理代数の論理関数は

      基底項の線形結合+定数項(1または0)

で表される。n=2の場合の例を以下に挙げる。

論理和 A∨B=a+b-ab
論理積 A∧B=ab
排他的論理和 A●B=a+b-2ab
否定論理積 A NAND B=-ab+1
否定論理和 A NOR B=¬(A∨B)=¬A∧¬B=(1-a)(1-b)=-a-b+ab+1
含意 A⇒B=¬A∨B=(1-a)+b-(1-a)b=-a+ab+1

n=3,n=4の場合の例をいくつか挙げると

A∨B∨C=a+b+c-ab-bc-ac+abc
A∨B∨C∨D=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+acd+abd+bcd-abcd

A●B●C=a+b+c-2ab-2bc-2ac+4abc
A●B●C●D=a+b+c+d-2ab-2ac-2ad-2bc-2bd-2cd+4abc+4acd+4abd+4bcd-8abcd

A∧B∧C=abc
A∧B∧C∧D=abcd


ここで、基底項について説明する。n=4の時、基底項は

{(a b c d)(ab ac ad bc bd cd)(abc acd abd bcd)(abcd)}

となる。このうち(ab ac ad bc bd cd)は4つの変数(a b c d)から二つの異なる変数を選んだ場合の数で、全部で4から2個を選ぶ場合の数4C2=4!/2!2!=6通りある。同様に(abc acd abd bcd)は4つから3つを選ぶ場合の数で4!/3!=4通りある。また、二項定理から

(1+1)^4=2^4=4C0+4C1+4C2+4C3+4C4=1+4+6+4+1=16

論理変数と神経細胞は同じではないが、共に0,1の値をとるものと抽象化することにより、類比的に考察することができる。即ち、神経細胞も0、1の値をとると仮定することができる。様々な論理関数が

      基底項の線形結合+定数項(0または1)

で表されることが分かったが、このうち、論理変数の積の形で現れる非線形項は何を表すのであろうか。有名なヘッブの規則によれば、神経細胞どうしで同時に発火する確率が高いほど、お互いの結合が強くなる。すなわち、非線形項はヘッブの規則を表したものと考えられる。例えば、ばらばらな神経細胞a,b,c,dがあったとすると、線形項と非線形項の組み合わせにより、様々なパターンの論理関数が現れる。最初に、ばらばらな神経細胞がいくつかあった時に、学習、連合、条件付け、環境との相互作用などにより、ヘッブの規則が適用され、非線形項が変化することにより、神経細胞のアンサンブルの挙動が変化していくのである。

神経細胞の集団の挙動には、分子の集団などの運動とは異なり、ヘッブの規則が適用され、非線形項の出現により、様々なパターンが現れるようである。

逆に、神経細胞が三つあるとする。それをa,b,cで表す。a,b,c個別ではそのまま出力し、ヘッブの法則によりa,bの結合、c,bの結合、a,b,cの結合が生まれ、全体としてそれらが抑制的に働くと仮定した場合の挙動を示すためには、

      a+b+c-ab-cb-abc

の計算をすることになる。具体的には

________a__b__c__-ab_-cb__-abc_______a+b+c-ab-cb-abc
________0__0__0___0_____0______0___________________0
________0__0__1___0_____0______0___________________1
________0__1__0___0_____0______0___________________1
________0__1__1___0____-1_____0___________________1
________1__0__0___0_____0______0___________________1
________1__0__1___0_____0______0___________________2
________1__1__0__-1____0______0___________________1
________1__1__1__-1___-1____-1___________________0

のように論理関数のような挙動を示す。このように「基底項の線形結合+定数項(1または0)」が全て論理関数になるわけではない。論理関数になるためには、抑制性と興奮性の結合のバランスが必要である。

a,b,c,dなどは神経細胞ひとつの出力として考えてきたが、a,b,c,dなどには、アンサンブルとして論理関数として振舞う集団を代入することができる。例えば、論理積A∧BのAに「P⇒Q]、Bに「Q⇒P」を代入すれば、双条件と呼ばれる論理関数が現れる。すなわち、

   A∧B=ab=(P⇒Q)∧(Q⇒P)=(-p+pq+1)(-q+pq+1)=pq-pq-p-pq+pq+pq-q+pq+1=-p-q+2pq+1=P⇔Q

論理変数ではなく、神経細胞の場合も類比的に考えることが可能である。ここで、p^2=p,q^2=qとなることに注意。

次に、最も基本的な推論形式 P∧(P⇒Q)⇒Q も次のように証明できる。

   「P∧(P⇒Q)⇒Q」=1-p(1-p+pq)+p(1-p+pq)q=1-(p-p+pq)+(p-p+pq)q
               =1-pq+pq=1

となり、この推論形式は恒真式(トートロジー)になることが分かる(三段論法・肯定式)。他の推論形式も同様に計算される。

 すべての大脳新皮質では神経細胞は層状に(I-VI層)配列されている。神経結合は主として層に対して垂直に形成されるが、結合の様式は層によって規定される。つまり、細胞がどの層にあるかによって、細胞が入力を受け、出力を送る部位が大局的に規定される。信号を送り出す細胞(遠心性細胞)はIII、V、VI層にあるが、III層は上位の大脳皮質に、V層は大脳以外の下位の神経核に、VI層は下位の大脳皮質と中継核にそれぞれ信号を送る。またIV層には中継核から信号を受ける細胞があり、他の層の細胞はIV層の細胞を経由して信号を間接的に受ける。
 たとえば映像の形と運動の情報をそれぞれ伝えるXとY系の視神経の興奮性視覚信号は単純型と複雑型に並列的に入力されることが示されている。また単純型から複雑型への直列的な抑制結合があることも示され、興奮性と抑制性神経回路の相互作用の結果として反応選択性が生れるとする考え方が提案されている(並列モデル)。


【ジョーク】脳の男女差
 男性の脳の重さが女性の脳の重さよりも重いと知った時、私は思わず「勝った!」と思ったが、イルカや象の例もあるので、脳の重さは決定打ではなさそうだ。右脳と左脳を連絡する脳梁や前交連という部分は、男性より女性のほうが大きいという。つまり、女性は右脳と左脳とで情報を男性よりも上手くやりとりし、脳全体としてのパフォーマンスを向上させ、容量を補っているらしい。分かりやすくするため、極端な式で表すと

    男脳パワー = 右脳パワー + 左脳パワー ー 0.06*(右脳パワー*左脳パワー)

    女脳パワー = 右脳パワー + 左脳パワー + 8956*(右脳パワー*左脳パワー)

くらいになっているようだ。大きく分けて言うと、右脳は感情、左脳は論理を司るので、女性がときとして見せる矛盾と不可解さも上の式で近似的に理解できるかもしれない。
 ノーベル章を受賞した根岸英一さんが、教育でも競争を重視するように提案したのも、女性を牽制してのことではなかろうか。競争に興味を示すのは女性よりも男性に多いから、競争を強調すれば、まだ男性が優位に立てるとの計算があるのではないか。それが証拠に、科学技術関連予算を巡る事業仕分けでも、「世界一じゃなくてはいけないんですか?」とふと本音を漏らした女性議員がいたではないか。いや、男である私自身も、「世界一」派ではなく「オンリーワン」派なので、世界一の連発はあまりよく分からないのだが。つまらないことでも、オンリーワンならば競わずしてナンバーワンだと思うのだが、ちと不精か。一面から見れば、あの仕分けは男性原理と女性原理の対立に見えた。
 女性の社会への進出は目覚しいものがある。その勢いで私のような人間は肩身の狭い思いをしなければならない世の中になった。一般的に言って男性が暮らしにくい世の中になったとは言えるようだ。


以上は、人工知能のコネクショニズムに近い考え方を述べてきた。以下では、古典的人工知能の基本的考え方について述べる。

記号はどこにあるのか?古典的記号主義、計算主義を巡って
 ゲーデルの数学的実在論と関係あるのだが、私が作った自動作曲システムを構成する、音楽で使われる記号、ひいては音楽の記号体系はどこにあるのだろうか?これらは、人間の脳内にあるのではない。あくまで、外界に実在するもので、記憶として一部脳内にあるに過ぎないのではないか。音楽自体も音楽の記号体系も、外界にあり、双方に対して、人間の脳は解釈系として機能する。
 世界内の存在を解釈する時に、人間は自分の知識に基いて解釈すると考え勝ちだが、あくまで、知識は人間の外界にある(あった)ものであり、人間の解釈対象は「存在自体」と「理論や知識」に二重化されているのではないか。存在を記号体系化したものが理論や知識であり、存在理解とは存在自体の記号体系に対する解釈である。記号体系は教育や観察・発見によってもたらされる。人間は存在を直に解釈するのではなく、存在を表すとされる記号体系を解釈するのではないか。そして、その記号体系は外界と記憶として脳内に存在する。
 Dijkstara(1972)の次の言葉がある。プログラミング言語Lispに関するものである。
 「Lispは冗談に『計算機を誤用するための最も賢い方法』であると言われてきた。この描写は大変な賛辞であると思う。この言葉によってLispの持つ完全に自由な雰囲気が伝わってくるからであるーーーーLispは、われわれの最も才能のある人々が、以前は不可能であった思考を行う手助けをしてきたのである。」
 Lispは、マッカーシーがリスト・データ構造の基本要素を極限まで簡略化し、その上の計算モデルを計算の理論で知られるラムダ計算に基いて構成し、設計したプログラミング言語である。いずれにせよ、記号の取り扱いや記号を組み合わせて複雑な知識を表現し、計算機上でそれらを操作するのに適した言語である。
 私は自分の作った自動作曲システムのことを言うのは、自慢するためではなく、他に経験も業績もないのと、今考えてみれば、古典的記号主義、計算主義に立ったシステムであるからである。私は自動作曲システムを作るのに、音楽を分析したのではなく、ジャズ理論の記号体系を分析し、それを応用したからである。私には音楽理論は分かるが、音楽が理解できるという自信はない。
 黒崎政男によると、ライプニッツは普遍記号学を構想し、ホッブスの「思考するとは計算することである」というテーゼを発展させ、「思考のアルファベット」たる少数の基本概念から、計算という記号操作によってすべての真理を演繹的の構築しようとしていた。つまりそれは、記号体系が特にうまく作られたならば、記号間の関係や秩序が、事物間の関係や秩序に対応する、という発想に基いており、記号の側の操作だけで事実や事象の知識に到達しようというものであった。この普遍記号学、およびこの記号主義と感覚、直感などの連関をめぐるライプニッツの思索は、今日のAI(人工知能)の計算主義をめぐる議論の原型をなしており、AIの根本問題に対する貴重な示唆を与えている。
  このライプニッツの説は、記号体系をジャズの理論体系とすれば、音楽という事象について、そのまま当てはまる。音楽を知らずとも、ジャズの理論で使われる記号を操作するだけで、作曲編曲なども可能であるということである。これは、記号操作の主体が、人間であろうと計算機であろうと、変わらない事実である。
 古典的人工知能の考え方は次のようなものである。
 心の構造を知識の構造と考え、さらに知識は記号の形式系として最もよく表現されると考える。認知は記号として表象された知識の上での形式的操作として理解される。古典的人工知能のパラダイムを特徴付けるためには計算主義の基く必要がある。
 古典的人工知能を特徴付ける計算主義では、知識は常にそれがどのように用いられるかという、処理過程の観点から扱われ、知識の表現ないし記述は、知識処理のアルゴリズムと不可分の関係にある。知識表現の方式として現在の人工知能で常用されている、意味ネットワーク、フレーム、プロダクション規則、論理式などいずれでも、知識を要素とその組み合わせからなる記号で表現し、それらを操作するための形式的規則/アルゴリズムを定義すると、知識の計算が実現する。記号で表現された要素が、心的構造においては概念、命題などに対応し、その上での操作(計算)が、認知、思考、推論、理解、記憶などに対応する。
 知識、ひいては心の本質は、形式的操作の対象となるような「記号」の概念でとらえることができる、という主張に対しては批判がある。その批判の多くは、人間の知識や認知のもつ状況依存性や身体性、イメージ性、アナログ性、技能性などに関わるもので、こうした批判を建設的に取り込んで、より豊かな記号概念にたつ古典的人工知能が十分に可能であると主張されている。
 古典的計算主義に対する克服は、コネクショニズムに基く計算観で試みられている。概念の分散表現の考え方は、記号なき知識表現を可能にするもので、古典的な知識観に対する改変をせまっている。




論理代数(ブール代数)と実験計画法への多変量非線形解析1

2022-11-19 15:48:39 | 日記

論理代数(ブール代数)と実験計画法への多変量非線形重回帰分析の適用について(荒井公康著)
 (論理学と代数学の同型性を巡って)
 (論理学の代数学への還元)
 (論理代数(ブール代数)を多変量非線形重回帰分析すると?その計算方法の確立!)
 (ウィトゲンシュタインもあきらめた論理定項の数学的意味を発見!)
 (実験計画法の直交表と論理代数の真理値表の類似性に着目!実験計画法への応用は可能か?)
 (実験計画法への多変量非線形重回帰分析の適用:材料開発への応用)
 (水溶液の話)
 (避雷器、バリスターの話:成功事例)
 (科学技術の話)
 (シェファーのストローク:NAND回路への書き換え)
 (命題定理の自動証明)
 (論理代数(ブール代数)と神経回路網の同型性)
 (人工知能のコネクショニズムとの関係)

 付録:実験計画法の解析手法への応用  付論1 付論2 付論3 付論4 付論5
     ニューラルネットワークとの関連 ブール代数&神経回路網 ブール環

論理的システムは、高度に非線形で、変数は離散的な値(通常は2値)をとるデジタル・システムであって、一般に複雑性がきわめて高い。したがって与えられた機能をできるだけ簡単に実現することが、経済性と信頼性を高める上で望ましい。2値論理システムの構成とその簡単化に関しては論理代数(ブール代数)が広く援用されている。
 数学科以外の学科で教えられる数学は、線形理論が多いので、わかりにくいかも知れないが、論理関数や論理変数に使われる、0,1という数字を普通の数字と考えて、重回帰分析をすると、ブールの論理代数(ブール代数)は極めて非線形な数式となることが分かる。この非線形性は組み合わせ効果によるもので、変数のクロスタームで表される。排他的論理和などを表す多変数のブール代数を表す数式を見たことのある人はいないはずである。論理和ならばあるかもしれない。
 実験計画法の直交表と論理代数(ブール代数)の真理値表は構造が似ている。論理代数を多変量非線形重回帰分析できれば、その計算法を実験計画法の解析に利用できる。バリスターと組成との関係のように、基礎方程式が存在しない場合には実験的に関係を求めなければならない。実験計画法の結果から求めた多変量非線形重回帰式は基礎方程式として利用できる。その式から特性が予測できる。
 このような数学は、実験計画法などの解析にも威力を発揮する。実験計画法の直交表と論理代数の真理値表は構造が似ているので、同じ計算方法が適用できる。実験計画法で問題にされる交互作用(相互作用、組み合わせ効果)も非線形項を考慮したもので、実験結果を非線形項を考慮した数式でまとめれば、予測計算などに極めて有効な手段となる。非線形ならば偏微分という操作が可能になるので、最適化方向も見つけやすくなる。線形の式では精度が落ちるし、平均値としての最適化方向しか明らかにならない。実験水準に応じた最適化方向を見出すには、非線形分析をしなければならない。
 よく知られているブール代数の公理系が、一般の代数と異なるのは、論理(演算)というものが、数式で表すと、極めて非線形なためである。これは組み合わせ効果によるものである。非線形の数学は難しく、私にも専門外でよく分からないが、私の投稿がきっかけになればと願っている。新しい数学の一分野に発展すればよいと願っている。
 排他的論理和などは、線形分離不可能で、人工的なニューラルネットワークでは、中間層を挿入し、バックプロパゲーションの手法で、問題の解決を行っているが、学習に時間がかかる。ここでは、そのようなことも関係している。最近の深層学習との関連も興味深いがよく分からない。ネットワークの中間層の構造を示唆しているのかも知れない。中間層の存在によって非線形な現象も認識可能になるからである。実験計画法の結果をネットワークに学習させることも可能だろう。
 「論理モデルとしての多重線形関数を用いた定性的命題獲得」という論題で月本洋(ツキモトヒロシ)さんという人が学位論文要旨をインターネット上に公開している。学生の頃、論理学の教科書で、命題論理の論理関数が代数的な多重線形関数に変形できることを学んだ。だが、逆に、多重線形関数から命題論理の論理関数の復元というのは困難だという印象を抱いていた。題材は同じようなものだが、私の場合は、命題論理関数の真理値表から多変量非線形重回帰分析によって多重線形関数を求めるということを行っている。その後に、真理値表と実験計画法の直交表の類似性から同じ計算法を実験計画法による実験結果に適用した。得られた非線型重回帰式に対しては最急傾斜法を適用して材料開発に応用した経験がある。問題設定は似ているが、目的のニュアンスは異なる。しかし、同じようなことを考える人がいるものだな、と不思議に思った。私も学位を貰えないものかな、とも思った。
 視覚研究で有名なマーは、機構(神経回路)から脳の情報処理を考えることの危険性を指摘し、計算論的アプローチの重要性を説いた。しかし、甘利俊一のようなアプローチもあり得る。神経細胞は互いに相互作用を及ぼし、組み合わせ効果から非線形性を獲得し、線形分離不可能な現象も認識できるようになるようである。神経回路の研究も大切だと思う。

「分子構造から生理活性を予測する一般的な手法として、定量的構造活性相関(QSAR)解析法が知られている。QSAR解析では分子構造から得られる多様な数値情報(分子記述子)と酵素活性のような生理活性との間の相関性・関連性を統計的に解釈することによって重回帰モデルに代表される数理モデルを構築する。近年では記述子と生理活性の間の非線形な関係を人工知能によるパターン認識よって解析し、より高精度な性能を有する予測モデルを構築したとする報告が増加している。」(植沢芳広「化学と工業2022年3月号)このような分野で、私の数学「論理代数(ブール代数)の多変量非線形重回帰分析」が役立つと思う。2022/04/04

この他、セラミックス、合金、触媒、複合材料など要因間に相互作用があり、特性と複数の要因間との関数関係が非線形になるような場合にも「論理代数(ブール代数)の多変量非線形重回帰分析」の手法が有効であると思う。2022/04/05

もう新しいことにはついていけないし、ついていく気力も失せた年齢なのであるが、頑張って、涌井良幸・涌井貞美著「ディープラーニングがわかる数学入門」(技術評論社)を読んでみた。仕事でAI関連をやっていたことがあるので、最近のAIの動向には興味がある。最小二乗法の考え方が分かれば理解できる内容であった。標本と予測値の誤差が最小になるようにパラメータを設定するという基本的で単純な考え方で最先端の深層学習も成り立っている。パラメータの数が膨大になるので誤差逆伝搬の手法が使われるのが、同じ最小二乗法を使う回帰分析などとの違いだ。考え方は単純なのだが、問題設定などが複雑で煩雑になるという印象を受けた。しかし、ディープラーニングの威力にはおどろかされるが、パターン認識などの領域に限られるようだ。2022/04/04


付論1:化学と数学と非線形性について

  濃硫酸には強力な脱水作用があり、これは硫酸分子と水の分子が強く結合するためで、水をふ含まない炭水化物からも、水素原子と酸素原子を2対1の比率でうばい、それらを黒く炭化します。濃硫酸は空気中の水分を吸収するため、乾燥剤として利用され、小生も学生の時、実験系に乾燥した空気を送り込むために、硫酸のトラップを作ったことがあります。硫酸と水とが混合すると激しく発熱し、多量の硫酸に水をそそぐと、加えた水が沸騰し硫酸をとびちらせるので危険で、多量の水に硫酸を少しずつ加えて希釈しなければならないことは、よく知られています。熱力学では溶解熱という概念があり、普通1モルの物質が液体に溶解するときに発生または吸収する熱量のことを言います。気体が液体や水に溶解する時は発熱が多いようです。硫酸、水酸化ナトリウム、エタノールなどが水に溶解する時は発熱、食塩、塩化アンモニウムの場合は吸熱となり、物質により異なります。また、溶液に溶媒を加えてうすめた時の、溶質1モル当たりの熱量の変化を希釈熱といい、希釈熱は溶液の濃度がうすいほど小さくなります。希釈熱は電解質、高分子溶液において、溶液中の電解質イオンや高分子などの溶質ー溶質、溶質ー溶媒間の相互作用に関する情報をふくんでいるので、物理化学の溶液論では重要な量です。
  以上は辞書にも書いてあることでしょう。さて、溶解熱では積分溶解熱(integral heat of solution)と微分溶解熱(differential heat of solution)とを区別する必要があります。いままで熱量という言葉を使ってきましたが、厳密に言うとエンタルピーという言葉を使う必要があります。硫酸の話に戻りますが、硫酸を絶えず攪拌しながら水にゆっくりと注いでいくと溶液はだんだんと暖かくなりますが、終わりに近づいてかなり濃厚な溶液に硫酸を加えるようになると加熱速度はずっと遅くなります。n1モルの水に1モルの硫酸を加えた時のエンタルピー変化を、特定の最終組成の溶液を作るための硫酸1モルあたりの積分溶解熱と呼びます。この値は溶液の濃度が小さいほど大きくなり、硫酸の場合、-96.19kJ/モルに収束します。この極限値を無限希釈への積分溶解熱(integral heat of solution to infinitedilution)と呼びます。積分溶解熱を硫酸と水のモル比に対してプロットすると、グラフが得られます。このグラフのある組成での勾配が微分溶解熱と呼ばれます。ある組成の溶液に対して、溶質を無限小変化させたときの積分溶解熱変化を微分溶解熱と考えてもよいです。化学の中にも随分と数学的概念が入っています。これは、一般に現象が非線形であるためでしょう。硫酸水溶液といった単純な系でさえ、濃度によって振る舞いが異なります。



付論2:送変電システムに組み込まれる機能性セラミックの組成計算

  小生が、T社にいた時に従事していた仕事ですが、これは「避雷器」という装置に関するものでした。「雷」という言葉が入っていますが、避雷針とか雷と直接関係のあるものではありません。送変電システムでは、変圧器、遮断器、断路器、避雷器などが、主に構成要素になっています。避雷器とは、送変電系統において、交流系統電圧が印加された状態で、雷サージ電圧が伝播してきた場合、直ちにこれを放電して線路の電圧を機器耐電圧以内に制限し、かつ雷サージのエネルギーを十分放出するとともに、機圧による続流は、これを遮断する自復能力を有し、開閉サージに対しても動作責務の範囲内で十分エネルギーを処理するものです。系統を保護するため、毎相対地間に接続される避雷器は異常電圧を一定値以内に抑制する能力があるため、系統の絶縁構成を決定する基準となります。簡単に言うと、避雷器は、発電所や変電所や電信柱の変圧器などを、異常電圧から保護する装置です。低い電圧に対しては絶縁体として振る舞いますが、高い電圧に対しては、抵抗が急激に抵抗値が低くなり、放電するような装置です。異常電圧が発生する理由ですが、落雷、遮断器の作動、送電線の地絡事故などが挙げられます。落雷があると、異常電圧が発生し、それが送電線に伝播します。遮断器というのは、超大型のスイッチのようなもので、小さな回路でも、スイッチを点けたり離したりすると火花が飛びますが、大電力では電力を遮断するだけで、高度な技術を要します。大電力では、遮断しても、アークの続流が空気中を継続して流れ、これを切断するためには、強力な空気流を吹き付けるとか、磁場を掛けるとかして、吹き消さなければならないのです。実際、何十年も大型のスイッチ(遮断器)を開閉する技術を開発するため、毎日遮断機をつけたり離したりといった部門もありました。もちろん手動ではなく、遠隔操作です。大電力を無理やり遮断した時も異常電圧が発生します。送電線はもちろん金属ですし、大地も導体ですから、送電線と大地とは、大きな容量のコンデンサを形成し、大量の電荷を蓄えています。したがって、何かの原因で送電線が切れて、大地に接地すれば、電荷が放出され異常電圧が発生します。これらの異常電圧から、変電所などの設備を絶縁破壊から守るのが「避雷器」なのです。
  これだけのことをする装置ですから、さぞや高度で複雑な装置だろうと思われるかも知れませんが、実際は大型のバリスターと呼ばれる機能性セラミックを積み重ねた単純な装置です。小生はこのバリスターの、いろいろな特性を制御する仕事をやっていました。バリスターとは非直線抵抗体とも呼ばれ、オームの法則には従わない抵抗体です。電圧が低い状態では絶縁体として振舞うのですが、電圧が高くなるにつれて、急激に抵抗値が低くなっていくような、不思議な抵抗体です。主成分ZnOにBi2O3,Sb2O3,NiO,Co2O3,MnO,Cr2O3,SiO2、Al2O3,B2O3,Ag2Oなどを添加して作ります。10種類程度の酸化物の成分ですから、随分と複雑な系です。これらの成分の濃度を動かして、特性を制御していました。話としては単純に聞こえるかもしれませんが、労力のいる作業で、4~5個の成分を動かした場合、成分間の相互作用があるので、計算機を使わないと解析できませんでした。この時、実験計画法というものを多用しました。(既に説明しましたね。)
  避雷器用のバリスターは、優れた電気的特性(強い非直線性)、課電寿命特性(長時間電圧が印加されても熱暴走しない)、放電耐量特性(大電流が流れても破壊しない)、が要求されます。電気的特性としては、なるべく非直線性の強いバリスターが求められます。避雷器には系統電圧が常時印加されるために、漏れ電流が流れるのですが、これが発熱原因となって、さらに抵抗が低くなり、更に発熱し、・・・と悪循環に陥り、熱暴走しないことが求められます。これが課電寿命特性です。また、大型のバリスターであるために、不均一になりがちで、抵抗の低いところに電流が集中し発熱することにより、高温を発し、周りに熱応力を生ずるために、大電流が流れた時に破壊してしまうバリスターもあります。これが、放電耐量特性です。なるべく均一性の高いバリスターを作る技術が求められます。
  以上が、大体、T社で従事していた仕事の内容です。私自身も理科系でありながら、入社するまで、「避雷器」なるものの存在さえ知りませんでした。理科系とは本当に広く深い世界だと思います。バリスター自身は、特に小型のものは、あらゆる機器に組み込まれているといっても過言ではありません。高い電圧に耐えられない部品の前には、必ずバリスターが使われます。



付論3:科学技術の営みの実際について

  不可知論とは、辞書によれば、「意識に与えられる感覚的経験の背後にある実在は論証的には認識できないという説。そういう実在を認める立場と、その有無も不確実とする立場がる。」とあります。不可知論が上記のようなものだとすれば、自然科学は全く正反対の方向で考えています。まず、素朴実在論を前提にしており、実在を論証しようとするわけではありません。そんなことが不可能なのは自明です。まず実在を無条件に認め、実在ないし、そこから派生する現象を把握し記述するのが自然科学であり、その知見を応用するのが技術です。
  不可知論が上記のもののようなものならば、観念論の一種であり、自然科学の実在論とは対立するものです。観念論と実在論は両立しません。どちらかを破棄しなければなりません。独我論、不可知論などの観念論を聞いて、理解できないわけではありませんが、現実離れした話にしか聞こえません。もしこのような主張ばかりならば、哲学は百害あって一利なしの、危険な学問でしょう。
  何故このようなことを言ったかというと、ある哲学系MLで、量子力学における観測問題を不可知論と勘違いした挙句、奇妙な問題提起がなされたからです。量子力学における観測問題はハイゼンベルクの不確定性原理から派生する現象で、数式で示すことができます。
  科学技術の営みの本質については、このページを全部読んで頂ければ、自明と思いますが、注意を喚起するためにも、ここで補足しておきたいと思います。



付論4:シェファーのストローク(縦棒演算)について

 シェファー(H.M.Sheffer)は、1913年に、唯一つの論理記号を用いて、否定、論理積、論理和、含意、双条件を表す方法を導いた。p|qは、p、qがともに真のときにかぎって偽となる、天邪鬼な演算である。

        p  q   p|q
        1  1    0
        1  0    1
        0  1    1
        0  0    1

別の表現では

        p|q = ¬(p∧q) = ¬p∨¬q

シェファーのストロークを使うと

        否定は ¬p = p|p
        論理和は p∨q = (p|p)|(q|q)

となることは、真理表を使ってもわかるが、次のようにしても導くことができる。

        p|p = ¬p∨¬p = ¬p
        (p|p)|(q|q) = (¬p)|(¬q) = (¬¬p)∨(¬¬q) = p∨q

良く知られているように、論理積、含意、双条件は否定と論理和で表されるから、それらをシェファーのストロークで表すことができる。
 良く分からなかったかも知れないが、現代的な言葉で言えば、シェファーのストロークとはNAND回路のことである。上に書いたことは、昔の記号論理学の教科書に書いてあることである。上のことを現代的な言葉で言い直せば、次のようになる。NAND回路の入力側を一つにまとめてしまうとNOT回路になる。NAND回路の出力をNOT回路で反転すればAND回路になる。NAND回路一つとNOT回路二つでOR回路を作ることができる。論理回路を設計するときにはデジタルICを使うが、論理回路の種類が多いと、ICもその種類だけそろえなければならない。しかし、NAND回路のICが一種類あれば、AND回路やOR回路、NOT回路をNAND回路の組み合わせで構成でき、部品の種類が少なくて済み、とても便利である。
 このように、ある論理記号をもとにとって、他の論理演算、従って論理式を表すということは、論理的な問題であるとともに、計算機の製作の上でも重要な課題のひとつであった。
 シェファーのストロークに関しては、ヴィトゲンシュタインの「論理哲学論考」などにも言及がある。

論理哲学論考5・511
すべてを包括し、世界を反映する論理が、かくも特殊なかぎ針と運針でこと足りるのはなぜか。ひとえにこれらすべてが、限りなく精巧な網目細工へと、世界を映す巨大な鏡へと、編みあげられるからだ。



 任意の論理回路のNAND回路への変換は、下記のLisp関数で行える。再帰を用いている。



(defun rewrite (l)
  (cond ((atom l) l)
      ((equal (first l) 'NAND)
       (list 'NAND
          (rewrite (second l))
          (rewrite (third l))))
      ((equal (first l) 'NOT)
       (rewrite (list 'NAND (second l) t)))
      ((equal (first l) 'AND)
       (rewrite (list 'NOT
                (list 'NAND (second l) (third l)))))
      ((equal (first l) 'OR)
       (rewrite (list 'NAND
                (list 'NOT (second l))
                (list 'NOT (third l)))))
      ((equal (first l) 'XOR)
       (rewrite (list 'AND
                (list 'OR (second l) (third l))
                (list 'OR
                   (list 'NOT (second l))
                   (list 'NOT (third l))))))
      (t (list 'error l))))

 バッククォートを使うと、次のようにもっと簡潔簡明に書ける。

(defun rewrite (l)
  (cond ((atom l) l)
      ((equal (first l) 'NAND)
      `(NAND ,(rewrite (second l)) ,(rewrite (third l))))
      ((equal (first l) 'NOT)
       (rewrite `(NAND ,(second l) t)))
      ((equal (first l) 'AND)
       (rewrite `(NOT (NAND ,(second l) ,(third l)))))
      ((equal (first l) 'OR)
       (rewrite `(NAND (NOT ,(second l)) (NOT ,(third l)))))
      ((equal (first l) 'XOR)
       (rewrite `(AND (OR ,(second l) ,(third l))
                 (OR (NOT ,(second l)) (NOT ,(third l))))))
      (t `(error ,l))))


命題論理の定理の自動証明も次のように簡潔に記述される。

(defun and-or-not (s)
  (cond ((atom s) s)
      ((equal (first s) 'NOT)
      `(NOT ,(and-or-not (second s))))
      ((equal (first s) 'AND)
      `(AND ,(and-or-not (second s))
           ,(and-or-not (third s))))
      ((equal (first s) 'OR)
      `(OR ,(and-or-not (second s))
          ,(and-or-not (third s))))
      ((equal (first s) '->)
      `(OR (NOT ,(and-or-not (second s)))
              ,(and-or-not (third s))))))

(defun de-morgan (s)
  (cond ((atom s) s)
      ((equal (first s) 'NOT)
       (move-not (second s)))
      ((equal (first s) 'AND)
      `(AND ,(de-morgan (second s))
           ,(de-morgan (third s))))
      ((equal (first s) 'OR)
      `(OR ,(de-morgan (second s))
          ,(de-morgan (third s))))))

(defun move-not (s)
  (cond ((atom s) `(NOT ,s))
      ((equal (first s) 'NOT)
       (de-morgan (second s)))
      ((equal (first s) 'AND)
      `(OR ,(move-not (second s))
          ,(move-not (third s))))
      ((equal (first s) 'OR)
      `(AND ,(move-not (second s))
           ,(move-not (third s))))))

;;;
;;; (prove '(OR a (NOT a)) ===> (OR a (NOT a))
;;; (prove '(AND (-> a a) (-> b b))) ===> (AND (OR (NOT a) a) (OR (NOT b) b)))
;;;
(defun prove (s)
  (de-morgan (and-or-not s)))


気候変動と干ばつ

2022-08-31 16:16:42 | 日記

干ばつの頻度と期間は、2000年以降、世界全体で29%増加していて、2050年までに干ばつが世界人口の75%以上に影響を与える可能性があります。雨の多い日本では、水不足や干ばつは遠い国の問題のように感じるかもしれません。 しかし、日本はオリーブオイルや小麦、大豆、鶏肉、とうもろこし、コーヒー豆、牛肉など多様な食品や原料、家畜飼料を輸入に依存しています。そしてその産出国の農業が、干ばつの被害を受けています。 干ばつによる森林火災も毎年のように拡大を続け、大気の二酸化炭素を吸収するたいせつな役割を担う大量の植物たちだけでなく、そこに暮らす人々や生きものたちの命を脅かしています。干ばつの原因のひとつは、気候変動による異常気象。これ以上、気候危機の加速をくいとめるためにわたしたちにできることが、まだまだあります。国連砂漠化防止条約(UNCCD)は、人類は干ばつの影響により「岐路に立っている。早急に、あらゆる手段を用いて緩和を加速する必要がある」としています。<グリーンピース>

荒井公康