素性研究への誘い

# 初めに

　プログラミングなどの実装技術はなくとも、脳科学の知見に基づいて生物模倣的、神経回路的にニューロコンピュータの原理的な検討・設計をしてみたい！

　と、なんともわがままな思想の元、個人的にＡＩに関する研究をしております。具体的な実証コードや検証データはありませんが、とりあえずＡＩに関する概念コンセプト的な検討提案として見てもらえれば。（ほとんど、個人的な私見だらけの妄想研究のような雑文です）

# ニューラルネットワークについての「そもそも論」
　今さらですが、現在私たちが一般的に使ってるいわゆる「ノイマン型コンピュータ」は、その処理の中心となるＣＰＵというハードウェア集積回路自体がおよそ四則演算やビット操作くらいの基本要素的な演算処理しかできないものの、さらにそれらの基本要素的な処理を積み上げて逐次シーケンス的に実行するソフトウェアが難しい処理を請け負い、最終的に人間が設計した複雑なアルゴリズムの汎用的な実現が可能となっていることは周知のところと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354740/5a29edf6-e0f6-966d-ed70-d0f95b8b1ae7.png)

　それに対して「ニューラルネットワーク」ってすごく不思議でおもしろい情報処理モデルだと思いませんか？そもそも、なぜあんな「発火する・しない」の丸い玉をたくさん並べてそれらの間を重み付きのエッジで繋げただけのものが、なぜあれだけ複雑な回帰問題や分類問題の処理をあれだけ柔軟かつ高い精度で実現できてしまうのか？（すごいバカっぽい言い方ですみません）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354740/599c6003-d8f1-2850-df8e-3fc231094039.png)

　このニューラルネットワークが行う演算処理の原理については「統計的な最小二乗平均法だ」とか「演算フィルタを重ねた合成関数だ」などといった抽象的で数理的な説明をよく耳にしますが、「基本的にコンピューティング原理は、数理モデルではなくアーキテクチャ（ハードウェア）でしか実装し得ない」と思い込んでいる私としてはどうにも腑に落ちません。

　思うにやはりニューラルネットワークの開発経緯として、上記のノイマン型のように人間が一から理詰めで作ったものではなく、生物模倣工学から始まっているという点がそもそもの混乱の原因だと思うんですね。人間の脳はとても複雑で柔軟な情報処理をしているのでなんとかそれを真似たい。それを構成する個々の脳神経細胞の処理内容はマカロ・ピッツモデル（パーセプトロン）として表現できるのが分かった。それならそれらを大量に接続すれば人間の脳のような情報処理ができるんじゃね？そのためには大量の重み係数パラメータを適切な組み合わせで調整する必要があるけどどうすりゃいいのか？そこで、日本の甘利俊一先生が発案した勾配降下法、そしてそれを改良したバックプロパゲーションのおかげで大量の重み係数パラメータ群を１つのコスト関数値という指標値に基づいて一気呵成にまとめて調整できるようになり、今までできなかった回帰問題や分類問題の処理を実現できるようになった。確かにその実現はありがたいんだけど、途中から数理的に進めすぎたおかげでニューラルネットワークの情報処理原理としてとても重要かつ肝心な検討がすっ飛ばされてしまったのではないかと。

# 素性というものの考え方

　そこでニューラルネットワークについてその機能的構成の観点でいろいろと検討を重ねてみたところ、そこに多数組み込まれている丸い玉のニューロン（ノード）の一つ一つは結局のところ発火する・しないの機能だけで考えてみればまるで「フラグ」に相当するものではないかとの考えに及びました。つまり現在考えられているフィードフォワード型ニューラルネットワークなどはその全体が大量のフラグを順次連鎖発火させるよう機能するフラグマップとして解釈でき、ひいては人間の生体脳の全体さえも大量のフラグの集合体のように思えてきます。

　例えばノイマン型コンピュータのＣＰＵに備えられているフラグには、汎用レジスタで行われた演算結果がゼロ（”０”）となった場合に立つ「ゼロフラグ」や、加算演算での桁上がり又は減算演算での桁借りの場合に立つ「キャリーフラグ」などがあります。このようにノイマン型では演算結果の補助情報として汎用的に参照されるフラグをいくつか限定的にしか備えていませんが、おそらくニューラルネットワークではそれぞれの多様な処理でそれぞれの多様な状況に応じて必要とされる多様な内容のフラグを大量に備えることになり、そのうち比較的具現的な内容のフラグからより抽象的な内容のフラグへ選択的に連鎖発火させ、最終的にそれらの連鎖発火した全体の発火態様がすなわち入力元の情報から抽出された認知内容の本質を表す「特徴量」に相当するのではないかと考えます。

※なお、この「特徴量」という文言についてですが、最後に「量」と記述されているものの実際には具体的な「数値」のように解釈されるべきではなく、あくまでも「価値」とか「態様」のように抽象的に解釈されるべきと個人的に思っています。これは恐らく原英語表記での"Feature Value"の"Value"が「価値」ではなく「量」と誤訳されてしまったからではないかと。

　そしてその特徴量の最小構成単位である個々のフラグに対応した情報処理内容的な意味合いが学術的に「素性（そせい；Feature）」と言われているようです。

　言い換えると、「ニューラルネットワークとは、分散表現された大量の素性（フラグ）を統合的に積み上げて処理する情報処理モデル」として解釈できるように思えます。実際に人間が持つ生体脳には顔を視認したときに必ず発火する特定の１つの脳神経細胞が存在するとのことです。これがいわゆる「顔認知素性ノード」に相当します。おそらくこのノードの入力には、目、鼻、口、耳などの顔要素を認知する素性ノードやそれら顔要素間の配置関係を表象する素性ノードなどが接続されていると想定されます。この素性という用語はもともと人文学分野での現象学、哲学などで提唱されている「構造主義」での「意味素性」から言われているものです。

　構造主義では、人間が想到する意味はあたかも因数分解的に複数の意味素性に分解できるとのこと。上記の顔の認知が複数の顔要素の認知に基づいていることに通じます。さらに分解された意味素性自体もさらに低次元で具現的な多数の素性に分解でき、逆にその素性の積み上げによって抽象的な上位の素性を表現できることになります。これは正に多数のパーセプトロンをノードとして多階層接続する構成のニューラルネットワークの処理原理に通じることになります。

　例えば回帰解析の場合について、下記のインタラクションページではたった１層分の隠れ層だけでも任意の連続関数を表現し得ることが分かりやすく解説されており、この隠れ層における多数のノードのそれぞれが当該連続関数曲線の各局所部分に対応する素性を有しているように解釈できます。

「ニューラルネットワークが任意の関数を表現できることの視覚的証明」

http://nnadl-ja.github.io/nnadl_site_ja/chap4.html

　他にも分類解析の場合について、例えば画像認識処理ＡＩの最も単純なモデルである手書き数字文字認識の多クラス分類タスクニューラルネットワークでは、下図に示すように「１」の手書き文字画像を認識するための特徴量が「上端部と下端部の縦方向直列配置」であることが想定されており、この場合には「上端部」、「下端部」、「縦方向直列配置」などといった幾何的な表現要素に対応するノードの素性の組み合わせで特徴量を表現し得るように解釈できます。なお、以上の特徴量では、極端な話で上下両端の間の途中が多少かすれて消えかかっていても「１」として認識できるそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354740/81dded9e-086e-8e7b-7428-775301e8c057.png)

　結局のところ、ニューラルネットワーク中にある個々のノードの素性は、それよりも低次かつ具現的にある他のどのような素性に対して、そしてそれらとどのような重み付けで接続されているかによって定義・創生されることになると考えます。

　そして以上から、例えば多様な多クラス分類タスクで多くの転移学習を繰り返すなどにより、多様な内容の素性ノードを豊富に集めるように知覚認知ネットワーク（つまり認知素性ノードマップ）を作ることが汎用人工知能の実装の第一歩になると私は考えました。そして、この認知素性ノードマップ上の認知素性ノード間を特定の関係性ネットワークでグラフ的、横断的に接続することでいわゆる「感覚に接地した概念素性ノード」を創生できるのではないかと考えます。そしてさらに、このような各ノードの素性内容自体がすなわち「細分化された意味」に相当するものと考えれば、どのように素性を創生し記憶するかという素性設計の手法や構成の検討を進めることで、機械的な意味理解機能や思考機能をも実現できる可能性まで感じています。

# しかし素性研究は難しい。。。
　以上のようにノード素性について詳細に検討することは、ニューラルネットワークという情報処理要素自体についての内部解析やこれからの応用展開を考える上で大変重要であると考えます。しかし前述したように、現在の深層学習技術ではコスト関数を介した勾配降下法、バックプロパゲーションによって全てのノードの素性を自動的にまとめて生成できてしまうことから個々のノードの素性を解析することが大変難しくなっており、そのためかこの素性そのものについての議論が現在はほとんど表面に出てないのが現状です（単に学会などのアカデミーに属していない私が知らないだけかもしれませんが）。

　そしてこのような素性解析において最もやっかいなのが「個々の素性内容自体を数理的に表現することが難しい」という点です。

　例えば上述した回帰問題や分類問題の場合のように解析的、幾何的に直結する具現的、要素的な素性内容ならまだしも、さらにその先の抽象的、観念的な素性内容については恐らく哲学や行動心理学などで用いられる観念的な用語などを駆使した言語的な表現でしか説明できず、とても現在の数学に基づく数理モデルなどで汎用的に表現できるとは到底思えません。これはすなわち、特定のニューラルネットワーク学習済みモデル中における各ノードの素性内容の解析を、現在のノイマン型コンピュータを用いて数理的かつ自動的に行うことが非常に困難であることを意味します。そしてこれがＡＩの内部解析（ＸＡＩ）を難しくしている本質的な要因ではないかと。

　このことから、およそ世界中の人工知能研究者のうちの多くが素性研究（"Feature Engineering"）の必要性・重要性について十分感じているものの、だーーーーーれもやりたがらず、手を付けようともせず、近づこうともせず、何とか回避したがっている状況にあるように思います。

　そんな中で現在のＡＩ技術では、比較的に数理的な扱いが可能なベクトルの形態でなんとか特徴量パラメータを人為的に設計し、それを用いた特徴量や素性の数理的な表現と抽出が行われているように思います。例えば近年研究開発されているＴｒａｎｓｆｏｒｍｅｒやＧＮＮ（Ｇｒａｐｈ　Ｎｅｕｒａｌ　Ｎｅｔｗｏｒｋ）などでは、その処理の本質としてとりあえずベクトルパラメータの表現形態で設計した特徴量や素性の内容についてのニューラルネットワーク間での変換を行ったりり、または特定の関係性を表すグラフネットワーク中の各ノードに特徴量ベクトルパラメータを埋め込んで（Ｅｍｂｅｄｄｉｎｇして）全体の評価を行ったりしているように考えます。これらは確かに目的とする情報処理的な機能は実現できても、結局このベクトルパラメータの形態ではそれらが表現する素性や特徴量の内容について具体的な意味合いが不明のままです。

　また、現在アメリカで進められている"Blue Brain"プロジェクトなどでは、人間の生体脳における全ての神経細胞の接続構成（コネクトームアーキテクチャ）の解析や、それらの分子レベルでのシミュレーションなどを試みていると聞いています。しかし、このような研究は脳のハードウェア的な構造解析という意味では大変意義を感じるものの、結局のところ各神経細胞が果たす情報処理上のソフトウェア的機能（意味合い）といった素性の解析までできなければ本当の意味での脳のコンピューティング原理の解明にはつながらないと個人的に考えています。願わくば、それぞれの神経細胞（ノード）自体にどんな素性を有しているかが記述されたラベルが貼ってあればいいのですが、、、（絶対ない）。

　結局は、今あるノイマン型コンピュータでは処理できない「意味」についての処理機能を検討するために素性研究の必要があるけれど、そのような素性研究を行うためにはノイマン型コンピュータを用いた数理情報処理的な自動演算処理を利用できず、人間の手作業が必要になりそうです。

# 素性解析手法の検討と提案
　そこで考えました。例えば手書き数字文字のＭＮＩＳＴデータを多クラス分類で画像認識するニューラルネットワークＡＩ学習済みモデルを用いて、「１」の文字画像の１サンプルである入力画像イメージと、それを入力した場合の第１隠れ層（１０２４ノード）、第２隠れ層（５１２ノード）、出力層（１０ノード）の各層の発火パターンの表示例を下図に示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2354740/2d211657-4093-9a55-3e8f-e8fa348373b0.png)

　各隠れ層の発火パターンは本来、縦１列で表示すべきかもしれませんが、さすがに縦に長すぎるので３２×３２＝１０２４ノード、３２×１６＝５１２ノードで表示しています。各層間での接続が全結合であり、また１層内におけるノード間の直接的な相間はないため、それぞれの層内における各ノードの配置位置や全体の発火パターンの模様には意味はありません。活性化関数がＲｅＬＵであるため、単純な白黒２値発火ではなく濃淡で表現される量的な発火表示になります。

　そして例えば第２隠れ層において強発火しているノードをいくつか探し、そのうち他の「４」や「７」の文字認識でも共通に強発火し、かつそれら以外の文字ではほぼ発火しないノードがあれば、そのノードの素性はおそらく「下端部」に相当する素性である可能性が推定されます。つまり、複数の入力データで共通して発火する同一ノードはそれら複数の入力データで共通している特徴量に関係する素性を表すと考えられます。

　このように多様な複数の入力データ間での発火パターンの比較照合を行うことによって、その認識ＡＩモデルでの各ノードの素性内容の推定が可能であるように思われます。なお、学習させた数字文字だけでなく、アルファベット文字や、他にもＧＵＩライブラリなどを介して「〇」、「△」、「＋」など任意の図形画像を入力した場合の発火パターンも併せて照合することも各ノードの素性の推定に役立てることが考えられます。なお、この場合には出力層での多クラス分類結果は関係なく、途中の隠れ層の発火パターンだけが必要であるため、それら追加の文字や図形に対する学習は不要です。そして同様に第１隠れ層の発火パターンにおける比較照合でも低次の素性内容の推定は可能であるように思います。そして最終的に各文字別の発火パターン中でそれぞれ発火している全てのノードの素性を知ることができれば、すなわちその発火パターンの全体は当該文字を認知する上での「素性設計図」に成り得ると考えます。

　しかしながら、第１、第２の各隠れ層におけるノード数はかなり多いため手作業でやるとしたら大変そうです。またできたとしても、その素性解析の結果得られる知見は当該ＡＩ学習済みモデルにおける学習内容に限定されたものであり、またその知見は視覚的で比較的理解しやすい幾何的な素性に限定されています。ですが、このような素性研究を多く重ねることで、少なくとも素性というものにどのような種類があり、それらの関係性や特性がどういったものか等について系統立てた法則律を見出し、知見を深めるきっかけには成り得ると思います。実際に今のところ、このような素性研究については（恐らく）世界的に見てもまだ一切の検討がなく、それを先行して行う意義は必ずあると考えます。もしかするとそのような素性の検討から、今までに提唱されていなかった新しい数理的、哲学的な概念を発見できるかもしれません。また今のところはこういった手作業での解析しか考えていませんが、素性研究の知見が進めばそれに基づいてゆくゆくは重みエッジ係数も考慮した発火パターンの特徴量を学習するＡＩ（つまりＡＩを解析するＡＩ）での自動的な解析もできたらと考えています。また、全結合だけでなくＣＮＮやいわゆる枝刈りなどによりもっと隠れ層のノード数を減らせるように最適化できればとも思います。

　以上、なんとも泥臭いやり方ではありますが、それでもこのような地道な作業から始めて素性研究を進めなければこれから先の本質的なＡＩ技術の進展は望めないと考えます。すごい基礎的な研究であってすぐにお金になるような応用技術に結びつくものではないかもしれませんが、どうでしょう、興味のある方、いっしょにやってみたいと思いませんか？

　ようこそ素性研究の世界へ！（やっとタイトル回収）

# 最後に
　年末の調整作業を押して何度かの中断も挟みつつグダグダながらもなんとか一応の形としてまとめました。文章ばっかりで図面が少なく、途中で飽きられて最後まで読まれた方は少ないかもしれません。ここまで読まれた方はお付き合い頂き大変ありがとうございました。

　なお実は、本投稿に記載している検討内容の一部については、すでに私一個人の名義で特許出願をしております。その先の応用技術も含めた詳細な内容については国際公開公報ＷＯ２０２２／０３０５０６で公開されていますので、興味のある方はご参照頂ければと思います。

　また、本投稿は私が所属するＡＩコミュニティのアドベントカレンダー向けとして作成しましたが、上記の検討は全て私一個人の私見に基づくものであり、決してコミュニティ全体の総意としての投稿ではありませんのでご了承下さい（まあ、一つの分科会活動として見て頂ければ）。

　「これどういうこと？」といったご質問、「その解釈おかしくね？」といった反論も含めたどのようなご意見でもコメントで頂ければ嬉しいです。

　以上