ネットワーク・エンジニアリングから学ぶこと − システム理論の見地から

[Cisco Advent Calendar 2017](https://qiita.com/advent-calendar/2017/cisco) 第4日目！

1. はじめに
2. ソフトウェアシステムから見たネットワーキング
3. ネットワークにおけるシステムの捉え方 – 複雑適応系
4. 複雑適応系的捉え方により、AIもブレークスルーした
5. 生命モデルとしての複雑適応系
6. ネットワーク・エンジニアリングの重要性
7. むすびに代えて – The Network. Intuitive.

-----------------------------

### 1. はじめに
　ネットワークエンジニアは最近肩身が狭い感じがします。「ネットワークがつながるのは当たり前。」「つながってくれさえいれば後は何も余計なことはしなくてよい。」「今勉強するならAIかな。 ネットワークは今更感ある。」
　でも本当にそうでしょうか。私はソフトウェア技術者としてプログラミングとソフトウェア・エンジニアリングを経験してから、ネットワーキングの世界に入りました。そしてそれ以来ずっと、ネットワーキングから多くのことを学んでいます。そこで本日は、ネットワーク・エンジニアリングを通じて学んだことを書いてみたいと思います。

### 2. ソフトウェアシステムから見たネットワーキング

　まず、複数のコンピューティング要素がネットワークを介してつながる分散システムが、どのようにネットワークを捉えているかを考えてみます。

　「Fallacies of Distributed Computing（分散コンピューティングの誤謬）[1]」として、次の8項目が挙げられています。

    1. The network is reliable.（ネットワークは信頼できる）
    2. Latency is zero.（遅延はゼロである）
    3. Bandwidth is infinite.（帯域は無限である）
    4. The network is secure. （ネットワークはセキュアである）
    5. Topology doesn't change. （トポロジーは不変である）
    6. There is one administrator. （一つの管理主体が存在する）
    7. Transport cost is zero. （トランスポートの費用はゼロである）
    8. The network is homogeneous. （ネットワークは一様である）

　ネットワーク技術者からすれば、おいおい何を言ってるんだ、という感じですが、そうでない人にとっては、 ネットワークについて、希望的観測も含めて、または、細かいことはひとまず捨象して、このように見做すことがままある、ということです。このように、ソフトウェア・エンジニアリングとネットワーク・エンジニアリングとの間には大きなギャップがあります。

　「分散システムは、*そんな障害があることさえ知らなかった* 障害によって、コンピュータが利用不能になるシステムである」というのは、チューリング賞を受賞したLeslie Lamport先生の言葉です [2]。分散システムはネットワークを介して複数のコンピューティング要素が接続されているため、そうでないシステムよりも不確実性が高いのです。


### 3. ネットワークにおけるシステムの捉え方 – 複雑適応系

　分散システムの不確実性は接続数に応じて増大し、しかも接続されるものが異種の場合は尚更不確実です。さらに広域ネットワークで接続される場合、不確実性は距離のべき乗で増大します。そのためネットワークエンジニアリングにおいては、不確実性を織り込んだシステム設計をする必要があります。John Postelの有名な堅牢性原則「送信するときは厳密に、受信するときは寛容に」[3] は、まさに不確実性への対処方法のひとつと言えるでしょう。

　私がソフトウェア技術者だった頃は、まずはスコープを定め、トップダウンで構造化するシステム設計手法が、当たり前でありベストプラクティスでした。しかし、ネットワークエンジニアリングにおいては、その手法では立行かないことに気づきました。何がどうつながってくるのか、 通信路などのリソースにいつどのような品質の変化や障害が起こるのかを、予め全て予測することが困難だからです。

　そんなときにヒントになったのが複雑適応系（Complex Adaptive Systems）の考え方です。複雑適応系を提唱し、サンタフェ研究所を主宰した物理学者のマレー・ゲルマンは、著書「クォークとジャガー」で、複雑適応系の特徴を次のように述べています [4]。

   - 自らを取り巻く環境と、自分とその環境との相互作用に関する情報を得て、その情報の中に規則性を見出すこと
   
   - それらの規則性を一種の「スキーマ」またはモデルへと圧縮し、そのスキーマを基に現実の世界で行動すること

　また、同じくサンタフェ研究所のボードメンバーであったJohn H. Hollandは、複雑適応系の特性を次のように要約しています [5]。Hollandは遺伝的アルゴリズム(Genetic Algorithm)の開発者としても有名です。

   - 並列に働く数多くの「エージェント」 (つまり要素的な機能単位) のネットワークであって、そこではシステムの制御は高度に分散化されている。
    
   - 複雑適応系は開かれたシステムであり、新しい可能性がつねにシステムそのものから自発的に生み出される。このようなシステムにとっては「平衡状態」という概念は何の意味ももたない。システムはつねに展開中で、推移の途上にある。平衡状態とはシステムの死にほかならない。 


　下記に、従来のシステム設計と複雑適応系的なシステム設計を対比してみます。だから何？と思うかもしれないけれども、実際役に立つこともあります！

| 従来のシステム設計　|複雑適応系的なシステム設計|   
|:-------------------|:------------------|
| 目的、ゴールが明確 　　　　　　　　| 目的、ゴールは必ずしも明確でない場合がある | 
| 複雑さ、あいまさを**減らす**   　　 | 複雑さ、あいまさを**扱う** |   
| 要素還元（構造のブレークダウン）を重視           | 要素同志の関連性およびダイナミズム（feedback, feedforward）を重視 |  
| 設計し、実装する             | 観測し、修正する      |   
| トップダウン的            |  ボトムアップ的| 



### 4. 複雑適応系の応用により、AIもブレークスルーした

　 Deep Learningの成功によって、現在AIが大変な脚光を浴びています。AIは、過去何回か壁にぶち当たって冬の時代を過ごし、現在の興隆は第三次AIブームと言われています。Neural Network自体は、1958年にRosenBlattが発表したパーセプトロンに端を発しているので、随分前から存在しています。それなのに、何故最近になってブレークスルーしたか。

　勿論、GPUの処理速度向上、扱えるデータ量の増大なども大きな要因ですが、一番大きなブレークスルーは、システムの捉え方として、「規則性を与える」から「規則性を見出す」というものにシフトしたことではないかと考えます。つまり、それまでは人間が、特徴量を抽出するためのフレームワークを与え、何に着目するかを指定していたのに対し、最近はConvolutional Neural Networkなどの適用により、「特徴を見出すこと」自体を学習することができるようになりました。これはまさに、「取り巻く環境と相互作用しながら、規則性を見出す」という、複雑適応系の考え方です。

　実際、最近の複雑適応系学会のTechnical Sessionの一つのトラックが、”Deep Learning Convolution Neural Network Applications”となっています [6]。


### 5. 生命モデルとしての複雑適応系

　ところで、複雑適応系は、 「適応（adaptive）」という用語を使っていますが、Adaptiveとは、Cambridge Dictionaryに拠ると「異なる環境条件に適合するように変化する能力を持つ（having an ability to change to suit different conditions ）[7] とあり、生命がその時々の環境に応じて生き延びる様を表します 。別な言い方をすれば、生命はまさに、複雑適応系の一つの代表であると言えます。

　生命のしくみは、とはいえ、今なお完全に解明されてはいないのですが、少なくとも我々は、生命のモデルやそれが示す現象から学ぶことはできます。

　我々は、人間の行動は全て脳が決定している、と想定しがちです。しかし、実際はそうではありません。例えば熱いものに触ったとき、脳が熱いと判断して、手を引っ込めるのではありません。手を引っ込めるのが先であり、脳はそれを後追いで認知しているだけです。生物においては、そうやって、それぞれの部分がかなり自律的に動作しています。

　このような単純な反応であれば、そんなの当たり前と思うかもしれません。しかし、高度な脳機能と考えられる「意識」でさえも、脳が能動的につくりだしているものではない、ということが分かってきています。脳は、各所での自律判断を総合して、整合性を取るために、あたかも自ら意識しているように認識しているに過ぎないのです。ベンジャミン・リベットの実験によると、脳が「指を動かそう」と意図する司令と、「無意識に」指の筋肉を動かそうという準備司令のタイミングをくらべたところ、「無意識」下の運動準備電位が生じた時刻は、脳が「意図」した時刻よりも約350ミリ秒早かったそうです [8]。またダニエル・デネットは、「脳を指揮する「自己」や「主観的な意識」と言うものは存在しない。」と言い切ります[9]。慶應義塾大学の前野隆司先生も「受動意識仮説」[10]を提唱し、「私たちの「意識」は何ら意思決定を行っているわけではなく、無意識的に決定された結果に追従し疑似体験しその結果をエピソード記憶に流し込むための装置に過ぎない」と述べています。最近の記事で、「「私（の脳機能である意識）」は「司令塔」でなく「観察者」」というわかり易い解説も見つかりました [11]。


### 6. ネットワーク・エンジニアリングの重要性

　現在はクラウド全盛の時代です。クラウドで殆どの高度な機能処理が行われるため、ネットワークは看過されがちです。しかしここでは、少し乱暴な比喩ですが、脳と身体の関係に当てはめて、ネットワーク・エンジニアリングも重要である、ということを主張してみたいと思います。

> 高度な機能はクラウドで行われるため、ネットワークには大した価値がないし、代替が効く。
> 　　↓
> 高度な機能は大脳で行われるため、身体には大した価値がないし、代替が効く。

　実際、そのような考え方もあるのかもしれません。最近も、筋肉や神経が萎縮する病気の人の頭部を、脳死患者の身体に接合する手術を行った、というニュースがありました。かなり繊細な問題なのでここでは論じ得ませんが、基本的には、大脳だけでなく、小脳や脊髄も、そして身体中に張り巡らされている神経も、人間にとっては重要であろうと思います。

> ネットワークはつながるのが当たり前
> 　　↓
> 身体は健康なのが当たり前。

　確かに、健康なときには身体に気を遣わず不摂生してしまいます。しかし、健康は当たり前ではありません。 身体のメンテナンス（ケア、休息、適度な運動）は必要です。

> ネットワークシステムの振る舞いは、全て集中コントローラが決定する。 
> 　　↓
> 人間の行動は全て脳が決定する。

　前項で見たとおり、人間の行動も脳が全てを制御するのではなく、各モジュールが自律的に動作しており脳はそれを追認する、という仮説が有力になっています。なおここでは一人の人間を比喩の対象としましたが、システムの規模が大きい場合、一人の人間ではなく、組織や社会に喩えた方が適切かもしれません。その場合はまさに、分散した各モジュールが自律的に動作し、さらにそれらモジュール同志が相互作用する、自律分散協調モデルとなります。自律分散協調モデルは生命のモデルです。集中システムよりスケール性があり、より頑健であると言えます。

　このように、生き生きと動作し、持続可能性を持つシステムを設計し運用するためには、複雑適応系理論、自律分散協調モデルを取り入れた、ネットワーク・エンジニアリングが重要なのです。


## 7. むすびに代えて – The Network. Intuitive.
　
　本稿では、システム理論の見地から、複雑適応系理論、自律分散協調モデルを取り入れたネットワーク・エンジニアリングの重要性を考察しました。

　ところで、最近Cisco社が打ち出したスローガンがThe Network. Intuitive. 「ネットワーク。直観的な。」普段は広報とかマーケティングとかあまり気にしたことはありませんが、この時ばかりは、 このフレーズを考えた広報の人と思いっきり握手したいと思いました。たぶん同じようなことを考えていたのではないかな。

　直観とは、論理的推論だけにとらわれない認識能力、ということであり、身体性や環境との相互作用を想起させます。そしてソリューション名がDNA。Digital Network Architectureの略ですが、当然、生物の遺伝情報を継承するデオキシリボ核酸を想起させます。 生命から学ぶ！継続して学習し適応するシステム！まさにComplex Adaptive Systemsです。

###追記
続編を書きました。↓
https://qiita.com/mkohno/items/a936357bd634e1f472af



###Reference
[1] Fallacies of Distributed Computing Explained　http://www.rgoarchitects.com/Files/fallacies.pdf
[2] https://www.microsoft.com/en-us/research/publication/distribution/
[3] RFC792, 2.10 “Robustness Principle”
[4] 「クォークとジャガー たゆみなく進化する複雑系」マレー・ゲルマン著、草思社 (1997)
[5] 「複雑系」とは何か、吉永良正、講談社現代新書 (1996)
[6]　Complex Adaptive Systems 2017 Conference https://complexsystems.mst.edu/media/conference/complexsystems/documents/CAS%20Schedule%20of%20Speakers.pdf
[7] https://dictionary.cambridge.org/dictionary/english/adaptive
[8] 「マインドタイム 脳と意識の時間」、ベンジャミン・リベット、岩波書店(2005)
[9] 「解明される意識」、ダニエル・C・デネット、青土社 (1997)
[10] 「脳はなぜ「心」を作ったのかー「私」の謎を解く受動意識仮説」、前野隆司、筑摩書房(2004)
[11] 「「私」は「司令塔」でなく「観察者」、ＡＩ構築の仮説 」 https://www.nikkei.com/article/DGXBZO35846920U1A021C1000000/