jiku log

JTCのデータサイエンス中間管理職の学び

統計検定1級対策に関する記事一覧 #統計検定

はじめに

本記事について

当ブログでは,統計検定1級・統計検定準1級に関連する数理統計学のTips記事や,私が日々学んでいることを紹介している。

統計検定に合格するためには,参考図書を読み問題演習をしっかりこなすことが重要だと考えるが,当ブログでは私が過去に参考書や問題集を読んでいたときに,つまずいたことや理解を深めるために考えたことを紹介する。そのため,「このサイトの内容さえ読めば,受験対策は完璧!」という性質のブログではないのだが,今後統計検定を受験する方にとって,少しでも参考になればと考える。

これらのTips記事は随時更新されるが,記事の数が増えてきたので,「増訂版 日本統計学会公式認定 統計検定1級対応 統計学」の章立てと,「統計検定1級出題範囲表」に沿ってインデックスを作った。本記事はこのインデックスを示すものである。

自己紹介

私は2023年に統計検定1級の統計数理に,2021年に統計検定1級の統計応用(理工学)に合格した。詳細な自己紹介は,下記サイトに記載した。

第4章 仮説検定 ※記事なし

(記事無し)

第5章 主なデータ解析手法 ※記事なし

(記事無し)

第6章 統計応用共通手法 ※記事なし

(記事無し)

「大規模言語モデル入門」を読む~第6章~

第6章 固有表現認識

本章では,テキストから特定の人名や地名などの固有表現を抽出する固有表現認識について紹介している。

6.1 固有表現認識とは

固有表現認識(Named Entity Recognition : NER)は,テキストから特定の人物や場所などの固有表現(Named Entity)を取り出すタスクである。
固有表現の種類は,Message Understanding Conference (MUC)では,組織名(ORGANIZATION),人名(PERSON),地名(LOCATION),日付表現(DATE),時間表現(TIME),金額表現(MONEY),割合表現(PERCENT)の7種類が定義されている。また,MUC以外にも,固有表現の種類は存在する。

固有表現のタスク

代表的な固有表現のタスクには,以下のようなものが挙げられる。

  • Flat NER :
    • 最も基本的な固有表現認識のタスクであり,テキスト上で固有表現ラベルが重複しない。実応用上では多くの場合,Flat NERが採用されている。
  • Nested NER :
    • 固有表現ラベルが重複する場合があるものの,Discontinuous NERのように不連続のものがないタスクである。
  • Discontinuous NER :
    • 固有表現ラベルが不連続の事例が存在するタスクである。
固有表現認識を解くための主要アプローチ
  • 系列ラベリングアプローチ(Sequence Labeling Approach) :
    • トークン列の各要素に対して固有表現ラベルを付与する。モデル化に条件付き確率場(Conditional Random Field : CRF)を用いる。
  • スパンベースアプローチ(Span-based Approach) :
    • 文字列やトークン列の任意の範囲(スパン)に対してラベルを付与する。固有表現が部分的に重複する状況に対応できるため,Nested NERタスクを解くために用いられる。
  • 生成型アプローチ(Generative Approach) :
    • 文字列やトークン列を入力し,テキスト上の固有表現の範囲固有表現ラベルを生成する。近年注目を集めているGPT-4などのデコーダ構成のLLMと相性がよく,これから主流になる可能性が考えられる。

6.2 データセット・前処理・評価指標

固有表現モデルを実装する前に,データセット・前処理・評価指標について説明がされていた。

Unicode正規化

前処理において,テキストの正規化が説明されていた。全角文字や半角文字などを統一するための手法として,Unicode正規化が紹介されていた。

系列ラベリングのためのラベル作成

系列ラベリングのアプローチでは,トークン列と同じ系列長のラベル列を予測する。ラベル列の表現方法にはIOB2記法が用いられる。
固有表現の先頭には”B-”(beginning)という接頭辞,先頭以外には"I-"(inside)という接頭辞,固有表現ではないラベルには"O"(outside)というラベルを付与する。

評価指標

評価指標には,抽出された固有表現と,人手で付けた正解の固有表現を比較する,適合率・再現率・F値が用いられる。
一方で,正解率はあまり用いられない。正解率では固有表現ではない語句の予測も評価されるが,固有表現認識のタスクでは固有表現ではない語句の予測はあまり意味がないためである。

6.3 固有表現認識モデルの実装

本節では,BERTを用いた実装方法について説明されていた。

ラベル間の遷移可能性を考慮した予測

複数の連続したトークンが1つの単語を表すことがあり,この単語は同じ固有表現になると考えられる(たとえば「B-地名」の後にくるトークンは,「I-地名」である可能性が高い)。
そのため,各トークンのラベルを独立に予測するよりもラベル間の遷移可能性を考慮することで予測精度を高められると考えられる。

全ての単語の並びの経路について予測すると,計算量は指数関数的に大きくなるので,効率よくラベル列を予測する方法として

  • ビタビアルゴリズム(Viterbi Algorithm)
  • 条件付き確率場による遷移可能性の学習

といった方法が提案されている。

6.4 アノテーションツールを用いたデータセット構築

固有表現認識のモデル作成において,適切なデータセットが存在しない場合は自前でデータセットを作成する必要がある。アノテーションを効率化するアノテーションツールとして,Label Studioが紹介されていた。

app.heartex.com

まとめと感想

感想 : 固有表現認識の種類やアルゴリズムが幅広く紹介

固有表現認識は,自然言語処理における代表的なタスクであるが,Flat NERやNested NER,Discontinuous NERなど各種手法が紹介されていたのは参考になった。

また固有表現認識は系列データにおけるラベル予測を行なうことになるので,単にラベルを予測するのではなく,ラベルの遷移を考慮した予測手法であるビタビアルゴリズムやCRFを用いた手法が紹介されていたのが参考になった。
たとえば動画にラベルを付与する問題においても,そのラベルが急に変わることが考えにくい場合には,上記の手法が応用できるかもしれない。


本記事を最後まで読んでくださり,どうもありがとうございました。

「大規模言語モデル入門」を読む〜第5章〜

第5章 大規模言語モデルのファインチューニング

本章では,Transformerをもちいて自然言語の様々なタスクを解くための方法を,具体的なコードとともに紹介している。

5.1 日本語ベンチマーク : JGLUE

機械学習のモデル構築には,データセットが必要になる。アルゴリズムの精度向上を目指すためには,モデル性能が評価できるようにベンチマークを準備することが重要である。

大規模言語モデルベンチマークの先駆けは,GLUE(General Language Understanding Evaluation)である。
JGLUEは,言語モデルの日本語理解能力を評価するためのベンチマークである。JGLUEに収録されているタスクおよびデータセットは,下表の通りである。

タスク データセット
文書分類 MARC-ja
JCoLA
文ペア関係予測 JSTS
JNLI
質問応答 JSQuAD
JCommonsenseQA
文書分類

MARC-Jaは,Amazonの商品レビューについて,5段階評価が1・2の文章を否定的("negative"),4・5の文章を肯定的("positive"),3の文章を除外して作成したデータセットである。タスクとしては2値分類になる。

JCoLAは文章が文法的に正しいか・間違っているというアノテーションがなされており,タスクとしては2値分類になる。

文ペア関係予測

JSTSは,意味的類似度計算のデータセットであり,文ペアの意味的類似度が0(意味が完全に異なる)から5(意味が完全に同じ)というスコアが付与されている。

JNLIは,自然言語推論用のデータセットであり,含意(entailment),矛盾(contradiction),中立(neutral)の3種類のラベルが付与されている。

質問応答

JSQuADは,質問文とその答えを含む可能性があるパッセージが与えられている。タスクとしては,パッセージの中から質問文の回答箇所を抜き出すというものになっている。

JCommonsenseQAは,常識推論能力を評価するためのデータセットで,クラウドワーカーが作成しているものである。

5.2 感情分析モデルの実装

この節では,MARC-jaデータセットとTransformerを用いて感情分析モデルの実装を行なう方法を説明している(評価方法については,次節で説明している)。

データの準備や前処理の方法について,コードを交えて説明しているが,特に興味深かったのは以下の2点である。

  • ミニバッチ学習 : Transformerを用いてテキストのような可変長の系列データを学習する際に,長さを揃えるためにダミートークンを加える(パディング)。
  • 学習率スケジューラ : 学習のはじめのころは学習率を徐々に大きくし(ウォームアップ),その後は学習率を小さくする。

※註:はじめのうちは学習率を大きくすることで,局所解から抜けやすくしているものと想定している。

5.3 感情分析モデルのエラー分析

5.2節で開発したモデルについて混同行列を用いて評価を行ない,精度を高めるための工夫として個別の事例を確認することについて説明している。

精度を高めるうえでの注意点として,モデルのショートカットについて説明している。これは特定のフレーズ,たとえば「☆4つ」といったフレーズに影響を受けてラベルが決まってしまう,という現象である。対策として,このようなフレーズを除外することが挙げられていた。

5.4 自然言語推論・意味的類似度計算・多肢選択式応答モデルの実装

本節では,これらのタスクに関するコード例を紹介している。

5.5 メモリ効率の良いファインチューニング

大規模言語モデルを用いた学習を行なう際には,大きなメモリ容量のGPUが必要になるが,このようなハードウェアは必ずしも簡単に用意できるわけではない。
本節では,メモリを節約して学習行なうためのテクニックについて説明している。

自動混合精度計算は,単精度浮動小数点数(FP32)半精度浮動小数点数(FP16)を組合わせる方法である。
前向き計算や誤差逆伝搬などはFP16を用いて,数値の桁数を必要とするパラメータ更新の際にはFP32を用いるというものである。

メモリを節約するための方法として,他には損失スケーリング勾配チェックポインティングLoRAチューニングなどの方法が説明されていた。

まとめと感想

感想 : 精度向上のための手順

コードを実装して動かしてみて,いざ精度検証をしてみると,精度が高くないことがある。
精度を下げる原因としてモデルのショートカットが説明されており,原因を探るための観点として参考になった。
ただ,実際にモデルのショートカットを引き起こす原因(トークン)を探るためには,SHAPなどを使うのかもしれない。


本記事を最後まで読んでくださり,どうもありがとうございました。

ベータ分布における変数変換 #統計検定

はじめに

統計検定1級の統計数理・理工学において,ベータ分布はこれまでに2回しか出たことがない。ただ,数理統計学のテキストにはよく出てくる分布なので紹介する。

ベータ分布

統計検定1級での出題

統計検定1級の統計数理・理工学において,2012年~2022年の10年の間で,関連する問題が2題出題されている。

ベータ分布と他の確率分布との関係

ベータ分布と他の分布の関係は以下の通りである。

以下の説明では,確率変数 X, Y確率密度関数 f_X(x), f_Y(y)とする。なお表記を簡単にするために,確率密度関数における定義域は略記する。

ベータ分布→連続一様分布の変換

確率変数 Xが,ベータ分布 Be(a,b)にしたがうとする。 a=b=1とすると,これは連続一様分布にしたがう。

方針

ベータ分布における特殊ケースが連続一様分布であり,この場合は変数変換の必要はない。

導出

ベータ分布の確率密度関数 Be(x|a, b) は,


 \displaystyle
Be(x|a, b) = \frac{1}{B(a, b)} x^{a-1} (1-x)^{b-1} \quad (0 \leq x \leq1)
である。ただし, B(a, b)はベータ関数である。


 \displaystyle
B(a, b) = \frac{\Gamma(a) \Gamma(b)}{\Gamma(a+b)} = \frac{(a-1)!  (b-1)!  }{(a+b-1)! }
より B(1, 1) = 1なので,

ベータ分布の確率密度関数 Be(x|a, b)は,


 \displaystyle
Be(x|a, b) = \frac{1}{B(1, 1)} x^{1-1} (1-x)^{1-1} = 1 \quad (0 \leq x \leq1)

となり,これは連続一様分布 U(0, 1)である。

連続一様分布→ベータ分布の変換

確率変数 Yが,連続一様分布 U(0, 1)にしたがうとする。すわなち確率変数 Y確率密度関数 f_Y(y)と累積分布関数 F_Y(y)がそれぞれ,


 \begin{align}
f_Y(y) &= 1 \quad (0 \leq y \leq 1) \\
F_Y(y) &= Y \quad (0 \leq y \leq 1)
\end{align}
であるとする。得られた n個のサンプル Y_1, ..., Y_nにおける第i順序統計量の確率密度関数 f_{(i)}(y)はベータ分布にしたがう。

方針

第i順序統計量の確率密度関数の式に当てはめていけばよい。

導出

第i順序統計量の確率密度関数は以下の式で表される。


 \begin{align}
 f_{(i)}(y) = \frac{n!}{(i-1)! (n-i)! } F_Y(y) ^{i-1} f_Y(y) (1 - F_Y(y))^{n-i}
\end{align}

この式に,連続一様分布の確率密度関数と累積分布関数の式を代入すると,


 \begin{align}
 f_{(i)}(y) = \frac{n!}{(i-1)! (n-i)! } y ^{i-1}  (1 - y)^{n-i} = Be(i, n-i+1)
\end{align}

となり,ベータ分布 Be(i, n-i+1)が得られた。

まとめ

統計検定1級でこれまで2回しか出てきていないベータ分布について,一様分布からベータ分布へ,ベータ分布から一様分布へ変換する方法についてまとめた。

数理統計学の教科書には,ガンマ分布とベータ分布の間にある美しい関係に感動したが,ベータ分布は分散やモーメント母関数の式が煩雑であるし,他の確率密度関数との関係も少ないので,問題としては出しにくいかもしれない。

本記事を最後まで読んでくださり,どうもありがとうございました。

「不偏推定量を求めよ」 #統計検定

はじめに

統計検定1級の統計数理・理工学において,不偏推定量は頻出分野である。
統計学の教科書では,「●●は不偏推定量である」「●●を不偏推定量として…」という説明は多いが,「不偏推定量を求めよ」という問題が出た時に頭が混乱したことがあったので,この記事では不偏推定量の求め方についてまとめた。

不偏推定量

統計検定1級での出題

統計検定1級の統計数理・理工学において,2012年~2022年の10年の間で,関連する問題が5年(6問)出題されている。

定義

データ \textbf{X} = (X_1, ..., X_n)が与えられているときに,そのサンプルを発生させている確率モデル f(x|\theta)のパラメータ \thetaを求める,というのは統計学において基本的な問題設定の一つである。

データ \textbf{X} = (X_1, ..., X_n)を用いてパラメータ \thetaを推定するので, \thetaの推定量は, \hat{\theta}( \textbf{X} )のように \textbf{X} の関数として表せる。

パラメータを点推定するとき,点推定量には最尤推定モーメント推定量など,様々な推定量があるが,このうち不偏推定量は以下の性質を満たす。


 \begin{align}
E_{\theta} [  \hat{\theta}( \textbf{X} ) ] = \theta
\end{align}

すなわち不偏推定量とは,期待値をとると確率モデルのパラメータになるような点推定量である,といえる。

不偏推定量の例

 \textbf{X} = (X_1, ..., X_n)が,平均 E[X] = \mu,分散 V[ X ] = \sigma^2をもつ確率分布から発生しているとする。


 \begin{align}
\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i
\end{align}

とすると,


 \begin{align}
E[   \bar{X}  ] =  E \left[  \frac{1}{n} \sum_{i=1}^{n} X_i \right] = \frac{1}{n} \sum_{i=1}^{n} E[  X_i  ]  = \mu
\end{align}

となる。よって標本平均  E[   \bar{X}  ]  は, \muの不偏推定量である。

また,不偏分散


 \begin{align}
S^2 = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X}  )^2
\end{align}

は, \sigma^2 の不偏推定量である。

不偏推定量の求め方

ここまでは,「●●は不偏推定量である」という説明であり,統計学の教科書ではおなじみの話題である。

一方で以前数理統計学の演習問題を解いていたときに,「データから不偏推定量を求めよ」という問題があり,これまでと逆の発想を求められたので頭が混乱したことがあった

たとえば,久保川 達也著 「現代数理統計学の基礎」の演習問題において,以下のような設問がある(第6章 問4)。

連続一様分布 U(0, \theta)にしたがうデータがあるとき,標本平均 \bar{X}に基づく不偏推定量 \hat{X}^{U2}を求めよ。

このような問題にアプローチする方法を考えてみよう。

ポイント1 : 求めたいものはデータXの関数である

求めたいものはパラメータの点推定量なので,先ほど説明したとおり,  \hat{\theta}( \textbf{X} ) のようなデータ Xの関数になる。
いろいろと手を動かしてみた結果,データ Xに関する値が出てこない場合は,どこかで考え方や計算手順を誤っている可能性がある。

ポイント2 : データXを発生させている確率モデルに着目する

求めたいものはパラメータの点推定量なので,データを発生させている確率モデル f(x| \theta)を仮定している。

ここでいう確率モデルとは確率密度関数確率関数のことであるが,確率モデルにおける特性値(平均や分散)は,データとパラメータの関係性を示している。また代表的な確率モデルを学ぶ際に,それらの特性値も併せて学ぶ。

今回の問題では,データが連続一様分布 U(0, \theta)にしたがうので,


 \begin{align}
E[ X ] &= \frac{\theta}{2} \\
V[ X ] &= \frac{\theta ^2}{12} 
\end{align}

のようになる。

改めて確認してみると,左辺にはデータの情報が,右辺にはパラメータの情報があるので,不偏推定量を求める際にもこれらがヒントになる。

ポイント3 : 係数調整を行なう

確率モデルの特性値を求めておけば,あとは係数調整である。

今回の問題設定では,標本平均 \bar{X}に基づく不偏推定量を求めたいので,標本平均に関する特性値を求めると,


 \begin{align}
E[   \bar{X}  ] =  E \left[  \frac{1}{n} \sum_{i=1}^{n} X_i \right] = \frac{1}{n} \sum_{i=1}^{n} E[  X_i  ] = \frac{\theta}{2}
\end{align}

となる。

あとは,パラメータ \thetaが主役になるように,余計な係数を推定量に持っていくように係数調整すると,


 \begin{align}
\theta = 2E[ \bar{X} ] = E[ 2 \bar{X} ]
\end{align}

となる。

この式を改めて確認してみる。右辺・左辺の項の順番を変えると,


 \begin{align}
E[ 2 \bar{X} ] = \theta 
\end{align}

になっており,「期待値を取るとパラメータの値になる」という不偏推定量の定義を満たしていることが分かる。

不偏推定量を求める手順

以上をまとめると,不偏推定量を求める手順は以下のようになる。

  • 手順1 : データXを発生させている確率モデルに着目し,この確率モデルの特性値(平均や分散)を求める。
  • 手順2 : 上記の特性値からパラメータが得られるよう係数調整を行なう。

不偏推定量を求める例題

上記に示した一様分布の例はかなりシンプルなので,少し複雑な例題を示す。

例題は,久保川 達也著 「現代数理統計学の基礎」の演習問題の第6章 問11である。
詳細は書籍を買っていただくか上記サイトを参照していただきたいが,不偏推定量に関する設問は以下のようなものである。

確率変数 Xが2項分布 Bin(n, p)にしたがうとする。
 \theta = p(1-p)とおくとき, \thetaの不偏推定量 \hat{\theta} ^Uを求めよ。

では,先ほどの手順にしたがい不偏推定量を求めてみよう。

手順1 : 確率モデルに着目し特性値(平均や分散)を求める

確率変数 Xが2項分布 Bin(n, p)にしたがうので,


 \begin{align}
E[ X ] &= np \\
V[ X ] &= np(1-p) \\
E[ X(X-1) ] &= n(n-1) p^2 
\end{align}

などが求められる。

手順2 : 係数調整を行なう

 \theta = p(1-p) = p - p^2なので,先に求めた特性値から p p^2を含むものを取り出す。


 \begin{align}
E[ X ] &= np \\  
\therefore  p &=E \left[ \frac{X}{n}   \right]   \\
\end{align}

であり,


 \begin{align}
E[ X(X-1) ] &= n(n-1) p^2  \\ 
\therefore   p^2  &= E \left[ \frac{X(X-1)}{n(n-1)}   \right]
\end{align}


なので,


 \begin{align}
\theta 
&= p - p^2 \\
&= E \left[ \frac{X}{n}  - \frac{X(X-1)}{n(n-1)}   \right] \\
&= E \left[ \frac{X(n-X)}{n(n-1)}   \right]
\end{align}

となり, \thetaの不偏推定量が求められた。

まとめ

統計検定1級の頻出分野である不偏推定量について,「不偏推定量を求めよ」という問題へのアプローチ方法についてまとめた。

本記事を最後まで読んでくださり,どうもありがとうございました。

順序統計量の累積分布関数 #統計検定

はじめに

統計検定1級の統計数理・理工学において,順序統計量は頻出分野である。この記事では順序統計量の累積分布関数の考え方についてまとめた。

順序統計量

統計検定1級での出題

統計検定1級の統計数理・理工学において,2012年~2022年の10年の間で,関連する問題が6年出題されている。

順序統計量の累積分布関数

確率変数 X確率密度関数および累積分布関数がそれぞれ f(x), F(x)であるとする。
また n個のサンプル X_1, ...., X_nが得られているとする。
このサンプルを小さい順に並べたとき, j番目に小さいサンプルのことを j順序統計量と呼び, X_{(j)}と表す。

 j順序統計量の累積分布関数 F_{X_{(j)}} (x)は,


 \begin{align}
F_{X_{(j)}} (x) = P(X_{(j)} \leq x) = \sum_{k=j}^{n} \dbinom{n}{k} \{ F(x) \}^k  \{ 1-F(x) \}^{n-k}
\end{align}

となる。
この式自体は教科書にも載っている式であるので有名なものである。
順序統計量については公式を覚えておけば解けることが多いが,統計検定では公式を覚えるだけでなく導出の仕方まで踏み込んだ問題が出されることがあるので,導出の仕方を理解しておくことをおすすめする。

導出のポイントについて整理してみた。

導出

ポイント1 : 状況を図示してみる

  P(X_{(j)} \leq x)が成り立っている状況を書き下してみる。

 X_{(j)} \leq xという事象は, n個のサンプルにおいて,


 \begin{align}
\{ X_{(j)} \leq x) \} = \{ \text{$j$個が$x$以下} \} \cup \{ \text{$(j+1)$個が$x$以下} \} \cup \cdots  \cup \{ \text{$n$個が$x$以下} \}
\end{align}

という状況である。「 k個のサンプルが x以下」という事象を B_kで表すと,


 \begin{align}
P( X_{(j)} \leq x) )
&= P(B_j) + P(B_{j+1}) + \cdots + P(B_n) \\ 
&= \sum_{k=j}^{n} P(B_k)
\end{align}

と書き直せる。

図示してみると理解がしやすい。

ポイント2 : 「k個がx以下」とい事象は2項分布にしたがう

サンプルの値が x以下になる確率は F(x)である。
事象 B_kにおいて, n個中 k個の値が x以下になり,この確率は2項分布 Bin(n, F(x))で表される。


 \begin{align}
P(B_k) = \dbinom{n}{k} \{ F(x) \}^k  \{ 1-F(x) \}^{n-k}
\end{align}

よってポイント1と合わせて,第 j順序統計量の累積分布関数 F_{X_{(j)}} (x)は以下のようになる。


 \begin{align}
F_{X_{(j)}} (x) = P(X_{(j)} \leq x) 
&= \sum_{k=j}^{n} P(B_k) \\
&= \sum_{k=j}^{n} \dbinom{n}{k} \{ F(x) \}^k  \{ 1-F(x) \}^{n-k}
\end{align}

まとめ

統計検定1級の頻出分野である順序統計量について,その累積分布関数の求め方をまとめた。

本記事を最後まで読んでくださり,どうもありがとうございました。

無記憶性を持つ連続型確率分布は指数分布か? #統計検定

はじめに

指数分布 Ex(\lambda)の重要な性質として,無記憶性が挙げられる。逆に,「無記憶性を持つ連続型確率分布は指数分布である」ということも示せる。この記事では,無記憶性を持つ連続型確率分布は指数分布であることを紹介する。

「無記憶性を持つ連続型確率分布は指数分布である」

無記憶性

無記憶性とは,以下のような性質のことである。

確率変数 Xが指数分布にしたがうとする。このとき,


 \begin{align}
P(X \gt s+t | X \gt s) = P(X \gt t)
\end{align}
が成り立ち,これを無記憶性と呼ぶ。

問題設定

今回の問題設定は,「指数分布は無記憶性を持つ」ということの逆が成り立つ,というものである。

連続な確率密度関数を持つ確率変数 X (ただし, X \gt 0)について,無記憶性


 \begin{align}
P(X \gt s+t | X \gt s) = P(X \gt t)
\end{align}
が成り立つとき,確率変数 Xは指数分布にしたがう。

これを証明してみよう。

方針

条件付き分布から関数方程式へ変換する

初手としては,無記憶性の式が条件付き分布の形になっているので,これを変形して条件付き分布ではない形にしてみる。

条件付き確率の定義式 P(A|B) = P(A, B)/P(B)より,


 \begin{align}
P(X \gt s+t | X \gt s) 
&= \frac{P(X \gt s+t, X \gt s ) }{P(X \gt s) }  \\
&=\frac{P(X \gt s+t ) }{P(X \gt s) } \\
&= P(X \gt t)
\end{align}

よって,


 \begin{align}
P(X \gt s+t ) = P(X \gt s) P(X \gt t)
\end{align}
となる。

見通しを立てやすくするために, P(X \gt t) \equiv G(t)のようにおくと,


 \begin{align}
G(s+t ) = G(s) G(t)
\end{align}

となる。これは,関数方程式の形になっている。

eが出てくる微分方程式の形を目指す

関数方程式の形には変形できたが,まだ具体的な関数の形が見えてこない。しかし最終的には指数分布になるので, e^xのような形が出てくるようにすることを目指せばよいと考えられる。また確率密度関数は連続なので, G(t)微分である G'(t)なども使えそうである。
そこで,微分 e^xに関連した式として,微分方程式の形にすることを目指す。

導出


 \begin{align}
G(s+t ) = G(s) G(t)  \tag{1}
\end{align}

の両辺を s微分すると,


 \begin{align}
G'(s+t ) = G'(s) G(t) \tag{2}
\end{align}

が得られる。同様に式(1)の両辺を t微分すると,


 \begin{align}
G'(s+t ) = G(s) G'(t) \tag{3}
\end{align}

が得られる。

式(2)と式(3)の辺々の比を取ると,


 \begin{align}
\frac{G'(s+t )}{G'(s+t )  } = \frac{G(s) G'(t)  }{G'(s) G(t)  } 
\end{align}

よって,


 \begin{align}
\frac{G'(s)}{G(s) } = \frac{G'(t)  }{G(t)  } 
\end{align}

これは G'(t) /G(t) が変数 s, tによらず一定,すなわち定数 Cとみなせるので,


 \begin{align}
\frac{G'(s)}{G(s) } = C   \Rightarrow \frac{d}{ds} \log{G(s)} = C
\end{align}

よって,


 \begin{align}
\log{G(s)} &= Cs + D \\
\therefore G(s) &= e^{Cs + D}
\end{align}

となる。

 G(0) = P(X \gt 0) = 1なので, D=0となる。

よって,確率変数 Xがしたがう確率密度関数と累積分布関数をそれぞれ f_X(x), F_X(x)とすると,


 \begin{align}
G(x) = P(X \gt x) = 1 - F_X(x) = e^{Cx}
\end{align}

となる。 C = - \lambda \quad (\lambda \gt 0)とおくと,


 \begin{align}
F_X(x) &= 1 - e^{-\lambda x} \quad (x \gt 0) \\
f_X(x) &= \lambda e^{-\lambda x} \quad (x \gt 0) 
\end{align}

となり,指数分布が得られた。

まとめ

関数方程式を解くことで、「無記憶性を持つ連続型確率分布は指数分布である」ということを示した。
関数方程式を解く際には,0といった特定の値を関数に入れるだけでなく,連続分布であることを利用して微分する,といったテクニックを使うことによって解くことができた。

本記事を最後まで読んでくださり,どうもありがとうございました。

「大規模言語モデル入門」を読む〜第4章〜

第4章 大規模言語モデルの進展

本章では,GPTなどのテキストを生成する能力を持つ大規模言語モデルに関する解説が紹介されている。特に,プロンプトによる言語モデルの制御方法や,大規模言語モデルの出力を人間の考えに沿ってチューニングする人間のフィードバックからの強化学習(RHLF)に関する解説が紹介されている。

4.1 モデルの大規模化とその効果

本節では,大規模言語モデルの開発の歴史におけるパラメータ数および事前学習に使うコーパス量について説明している。
下表は,本節で紹介されているモデルにおけるパラメータ数および事前学習のコーパスの容量を示したものである。

モデル 発表年 パラメータ数 事前学習のコーパスの容量
BERT 2018年 3.4億個 30億語
GPT-2 2019年 15億個
GPT-3 2020年 1,750億個 3,000億語
PaLM 2022年 5,400億個
Chinchilla 2022年 1.4兆語

このようにモデルが大規模化していく背景として,モデルの規模を大きくすることで性能が比例して改善していくという経験的な法則であるスケール則(scaling laws)がある。

大規模言語モデルの規模を測る際には,パラメータ数やコーパスの容量に加えて,計算量(FLOPS)が用いられる。

4.2 プロンプトによる言語モデルの制御

従来ではファインチューニングをしないと解けないと思われていたタスクが,モデルが大規模化することに伴い,プロンプトと呼ばれるテキストを入力することで,後続するテキストを予測することができることがわかってきた。

文脈内学習

プロンプトを使ってタスクを解く際に,例示を与えることが有効である。複数個の例示を与えて学習させることをfew-shot学習(few-shot learning)または文脈内学習(in-context learning; ICL)と呼ぶ。1回だけ例示を与えるone-shot学習により,例示を与えない場合よりも性能は上がり,few-shot学習で例示を増やしていくと徐々に性能が向上する。

chain-of-thought 推論

大規模言語モデルが苦手とするタスクの一つに,多段階の推論(マルチステップ推論)がある。こうした多段階の推論が必要な際に,推論過程の例示を与えるchain-of-thought推論(chain-of-thought reasoning)を用いると性能が改善することが報告されている。

chain-of-thought推論では,最初に人間が推論の過程を示すような質問例・解答例を与えたうえで,本来解きたいタスクに関する質問を与えるというものである。
さらに,推論過程を人間が与えるのではなく,推論過程の生成を促す「ステップごとに考えよう。」といったプロンプトを与えるzero-shot chain-of-thought推論も提案されている。

このように,プロンプトを工夫することで性能を図ることをプロンプトエンジニアリング(prompt engineering)と呼ぶ。

4.3 アライメントの必要性

大規模言語モデルは,大規模なコーパスで後続するトークンの予測を行なうことで訓練されているが,このようなモデルによる予測が,人間や社会にとって理想的な挙動になっている保証がない。大規模言語モデルの出力が,人間や社会にとって有益な挙動になるように調整することをアライメント(alignment)と呼ぶ。

大規模言語モデルを開発するAnthropicはアライメントを行なう際の3つの基準として,役立つこと(helpful),正直であること(honest),無害であること(harmless)を挙げている。

4.4 指示チューニング

指示チューニング(instruction tuning)は,支持を含んだプロンプトと理想的な出力テキストの組で構成されるデータセットを使ってアライメントを行なう方法である。

指示チューニングは単純かつ効果的な方法ではあるが,大規模で高品質なデータセットを作ることが難しい,モデルの出力にフィードバックを行なえない,といった問題がある。

4.5 人間のフィードバックからの強化学習

人間のフィードバックからの強化学習 (reinforcement learning from human feedback; RLHF)は,人間の好みに対して直接的に最適化することでアライメントを行なう。

RLHFは,以下のステップで行なわれる。

  • Step 1. 指示チューニング済みのモデルが出力したテキストに対して人手で優劣のラベルを付与したデータセットを作成する。
  • Step 2. このデータセットを使って,報酬を予測する報酬モデル(reward model)を訓練する。
  • Step 3. 強化学習を使って,報酬を最大化するように指示チューニング済みモデルをファインチューニングする。

指示チューニングをする場合は正解のテキストを作る必要があったが,RLHFではテキストの優劣を判断するだけなので,データセットの作成にかかる人的コストは削減できる。

まとめと感想

感想 : 大規模言語モデルの評価・学習方法の変遷が興味深い

近年の大規模言語モデルは,スケール則にしたがいパラメータ数を増やしていくことによって性能を高めていっていた。なお,「深層学習において,パラメータ数が増えると性能が上がること」については過去記事にまとめた。
stern-bow.hatenablog.com

ChatGPT登場前の大規模言語モデルは,おそらく性能を高めていくことを目標に開発が進んでいたと考えられるが,テキスト生成を行なうGPTでは「出力されたテキストが,人間の好みに沿ったものであること」を満たすことを目的に最適化していっていることが興味深かった。

単に性能の高さを追い求めるだけでなく,近年の大規模言語モデルの開発において,モデルを評価するべき観点については理解する必要があると感じた。

本記事を最後まで読んでくださり,どうもありがとうございました。