(荒井公康著)
論理関数の基本的なものに論理和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の根本問題に対する貴重な示唆を与えている。
このライプニッツの説は、記号体系をジャズの理論体系とすれば、音楽という事象について、そのまま当てはまる。音楽を知らずとも、ジャズの理論で使われる記号を操作するだけで、作曲編曲なども可能であるということである。これは、記号操作の主体が、人間であろうと計算機であろうと、変わらない事実である。
古典的人工知能の考え方は次のようなものである。
心の構造を知識の構造と考え、さらに知識は記号の形式系として最もよく表現されると考える。認知は記号として表象された知識の上での形式的操作として理解される。古典的人工知能のパラダイムを特徴付けるためには計算主義の基く必要がある。
古典的人工知能を特徴付ける計算主義では、知識は常にそれがどのように用いられるかという、処理過程の観点から扱われ、知識の表現ないし記述は、知識処理のアルゴリズムと不可分の関係にある。知識表現の方式として現在の人工知能で常用されている、意味ネットワーク、フレーム、プロダクション規則、論理式などいずれでも、知識を要素とその組み合わせからなる記号で表現し、それらを操作するための形式的規則/アルゴリズムを定義すると、知識の計算が実現する。記号で表現された要素が、心的構造においては概念、命題などに対応し、その上での操作(計算)が、認知、思考、推論、理解、記憶などに対応する。
知識、ひいては心の本質は、形式的操作の対象となるような「記号」の概念でとらえることができる、という主張に対しては批判がある。その批判の多くは、人間の知識や認知のもつ状況依存性や身体性、イメージ性、アナログ性、技能性などに関わるもので、こうした批判を建設的に取り込んで、より豊かな記号概念にたつ古典的人工知能が十分に可能であると主張されている。
古典的計算主義に対する克服は、コネクショニズムに基く計算観で試みられている。概念の分散表現の考え方は、記号なき知識表現を可能にするもので、古典的な知識観に対する改変をせまっている。
最新の画像[もっと見る]
-
パソコンと音楽の話 10ヶ月前
-
南河原公園のベンチから 11ヶ月前
-
強力洗剤で掃除 12ヶ月前
-
部屋の前の遅咲きの桜 1年前
-
部屋の前の遅咲きの桜 1年前
-
音楽制作環境(MIDIファイル作成まで) 1年前
-
音楽制作環境(MIDIファイル作成まで) 1年前
-
音楽制作環境(MIDIファイル作成まで) 1年前
-
音楽制作環境(MIDIファイル作成まで) 1年前
-
モーリス・ラヴェル作品集 1年前
※コメント投稿者のブログIDはブログ作成者のみに通知されます