はじめに:「未来は、今が決める」
「明日の天気はどうなるだろう?」と考えたとき、私たちは無意識に「今日の天気」を参考にしています。もし、「明いきょうの天気が晴れなら、明日の天気は今日の天気にだけ影響され、昨日やおとといの天気がどうだったかは関係ない」というルールで未来を予測するとしたらどうでしょうか。
このように、「ある未来の出来事は、現在の状態だけで決まり、過去の経緯には影響されない」という考え方を「マルコフ性」と呼びます。このシンプルながらも強力な性質は、ロシアの数学者アンドレイ・マルコフによって提唱され、現代のAI(人工知能)やデータサイエンスの様々な場面で活用されています。
第1章:マルコフ性の核心 – 「記憶を持たない」性質
マルコフ性の最も重要なポイントは、「無記憶性(memorylessness)」とも呼ばれる特徴です。これは、将来の状態を予測するために必要な情報はすべて現在の状態に含まれており、それ以前の歴史(過去の状態)を覚えておく必要がない、ということを意味します。
もちろん、現実世界のすべての現象がこの性質を持つわけではありません。例えば、植物の成長は過去の日照時間や水やりの頻度に影響されますし、人の健康状態も過去の生活習慣が関係します。 しかし、多くの複雑な現象を分析する際に、「マルコフ性を持つ」と仮定することで、モデルを大幅に単純化し、扱いやすくすることができるのです。
天気を例に考えてみましょう。
- マルコフ性を持つと仮定した場合:
明日の天気を予測するのに必要なのは「今日の天気」だけです。「昨日が雨で、一昨日が曇りだった」という情報は考慮しません。今日の天気が「晴れ」という事実が、未来を予測するためのすべての情報を含んでいると考えます。 - 現実の天気予報:
実際の天気予報はもっと複雑で、気圧配置や風の流れなど、多くの過去からの連続的なデータを使います。しかし、マルコフ性の考え方は、多くの予測モデルの基礎的なアイデアとして役立っています。
第2章:マルコフ性を持つモデルたち
「マルコフ性」という性質を利用した、いくつかの重要な確率モデルが存在します。これらは、分析したい対象に応じて使い分けられます。
マルコフ連鎖 (Markov Chain)
マルコフ連鎖は、マルコフ性を持つモデルの中で最も基本的なものです。時間が離散的(例:1日後、2日後…)で、状態も離散的(例:晴れ、曇り、雨)な場合に用いられます。
各状態から次の状態へ移り変わる確率を「遷移確率」と呼び、これを行列の形でまとめたものを「遷移確率行列」と言います。
例えば、天気の遷移を以下のような表(遷移確率行列)で表現できます。
翌日が「晴れ」になる確率 | 翌日が「曇り」になる確率 | 翌日が「雨」になる確率 | |
---|---|---|---|
晴れ | 0.7 | 0.2 | 0.1 |
曇り | 0.4 | 0.4 | 0.2 |
雨 | 0.2 | 0.5 | 0.3 |
この表によれば、今日が「晴れ」の場合、明日は70%の確率で「晴れ」になり、過去の天気がどうであれこの確率は変わりません。これがマルコフ連鎖の基本的な考え方です。
隠れマルコフモデル (Hidden Markov Model, HMM)
隠れマルコフモデル(HMM)は、マルコフ連鎖を拡張したモデルです。私たちが直接観測できる事象の裏に、観測できない(隠れた)状態が存在し、その隠れた状態がマルコフ性に従って遷移すると考えます。
例えば、日本語入力システム(かな漢字変換)がこの一例です。私たちは「ひらがなの列」を観測しますが、その裏には「品詞の系列」という隠れた状態が存在します。HMMは、観測されたひらがな列から、最も確からしい品詞の並び(隠れた状態の遷移)を推定し、適切な漢字変換を行うのに役立ちます。 この技術は音声認識などにも応用されています。
マルコフ決定過程 (Markov Decision Process, MDP)
マルコフ決定過程(MDP)は、マルコフ連鎖に「行動」と「報酬」の概念を加えたものです。 これは、特にAIが自ら学習する「強化学習」の分野で中心的な役割を果たします。
エージェント(AI)は、現在の「状態」を観測し、最も良い「報酬」が得られるように「行動」を選択します。行動の結果、エージェントは新たな「状態」に遷移し、報酬を受け取ります。この一連の流れがマルコフ性を持ち、「現在の状態」のみに基づいて最適な「行動」を学習していくのがマルコフ決定過程の枠組みです。
第3章:マルコフ性はどこで使われている?身近な応用例
マルコフ性の考え方は、私たちの身の回りの様々な技術に応用されています。
- 自然言語処理(文章生成・予測変換)
スマートフォンのキーボードで文字を打つと次に入力しそうな単語が候補として表示される予測変換機能は、マルコフ性の応用例です。「直前の単語」という現在の状態から、「次に出現する確率が高い単語」を予測しています。単純なモデルでは直前の一語だけを見ますが、より高度なモデルでは直前の数単語(高次マルコフモデル)を見て文脈を判断します。 - 強化学習(ゲームAI・ロボット制御)
前述のマルコフ決定過程は、強化学習の根幹をなす理論です。 ゲームのキャラクターが状況に応じて最適な行動を選択したり、ロボットアームが物をつかむために一連の動作を学習したりする際に活用されています。 - 金融工学(株価予測モデル)
株価の変動のようなランダムに見える動きを分析するモデルの一つとして、マルコフ過程が利用されることがあります。 将来の価格変動は現在の価格にのみ依存するという仮定のもとで、将来のリスクを評価します。 - 音声認識
隠れマルコフモデル(HMM)が古くから利用されてきた代表的な分野です。 私たちが発する音声の波形(観測データ)から、その背後にある単語や音素の並び(隠れた状態)を推定し、文章として認識します。
第4章:Pythonでマルコフ連鎖を体験してみよう
マルコフ連鎖を使って、簡単な文章を自動生成するプログラムを作成してみましょう。ここでは、ある単語の次に出現する単語の確率(遷移確率)を元に、文章を組み立てていきます。
import random
# マルコフ連鎖の遷移確率を定義する辞書
# キー:現在の単語, 値:(次に出現しうる単語のリスト, その出現確率のリスト)
markov_chain = { '私': (['は', 'が'], [0.8, 0.2]), 'は': (['AI', '人間'], [0.6, 0.4]), 'が': (['好き', '欲しい'], [0.5, 0.5]), 'AI': (['が', 'を'], [0.9, 0.1]), '人間': (['が', 'は'], [0.7, 0.3]), '好き': (['です', '。'], [0.8, 0.2]), '欲しい': (['です', '。'], [0.5, 0.5]), 'を': (['学ぶ', '作る'], [0.6, 0.4]), '学ぶ': (['。'], [1.0]), '作る': (['。'], [1.0]), 'です': (['。'], [1.0]), '__START__': (['私'], [1.0]) # 文章の開始を示す特別な状態
}
def generate_sentence(chain, max_length=10): # 開始状態から最初の単語を決定 current_word = random.choices( chain['__START__'], weights=chain['__START__'], k=1 ) sentence = [current_word] for _ in range(max_length - 1): # 現在の単語が遷移先に定義されていない、または文の終端なら終了 if current_word not in chain or current_word == '。': break # 遷移先候補と確率を取得 next_words, probabilities = chain[current_word] # 次の単語を確率に基づいて選択 next_word = random.choices(next_words, weights=probabilities, k=1) sentence.append(next_word) current_word = next_word # 最後の単語が句点でない場合は追加 if sentence[-1] != '。': sentence.append('。') return "".join(sentence)
# 文章を生成して表示
print("生成された文章:", generate_sentence(markov_chain))
# 例:生成された文章: 私はAIが好きです。
# 例:生成された文章: 私が欲しいです。
このコードは、現在の単語をもとに、あらかじめ定義された確率に従って次の単語を選び、それをつなげていくことで文章を生成します。実行するたびに異なる文章が作られる可能性があります。これがマルコフ連鎖の簡単な応用例です。
まとめ
マルコフ性は「未来は現在の状態のみに依存し、過去には依存しない」という、一見すると非常に大胆な仮定に基づいた性質です。 このシンプルさゆえに、複雑な現実世界の事象をモデル化し、未来を予測するための強力なツールとして、AI、機械学習、自然言語処理、金融工学など幅広い分野で活用されています。
次にスマートフォンの予測変換機能を使うときや、AIに関するニュースを見るときには、その裏で「マルコフ性」という考え方が働いているかもしれない、と想像してみてはいかがでしょうか。