テクノロジー

機械学習をするなら知っておきたいAutoencoderについてまとめてみた

機械学習をするなら知っておきたいAutoencoderについてまとめてみた

2010年代から現在にかけてのAIブームは「第3次AIブーム」と呼ばれており、当ブームを特徴付ける技術として「機械学習」が上げられます。機械学習を支える技術は複数ありますが、なかでも有名なのは「Autoencoder(オートエンコーダ)」ですよね。「Autoencoder(オートエンコーダ)」を利用した技術は画像認識や音声認識、データ分析など多岐にわたり利用されています。

機械学習に興味を持たれている方の中には、「Autoencoder(オートエンコーダ)ってどんなもの?」「Autoencoder(オートエンコーダ)とはどんな仕組みなの?」と疑問を持たれている方も多いのではないでしょうか。

この記事を読めば、Autoencoder(オートエンコーダ)についてや利用方法を知ることができます。ぜひ、Autoencoderを機械学習で使いましょう。

そこで今回は、Autoencoder(オートエンコーダ)の概要についてお伝えします。

Autoencoderとは何?

Autoencoderのイメージ
Autoencoder(オートエンコーダ)とは、データの次元を削減し圧縮する計算方法で、ニューラルネットワークを利用した機械学習を機能させるための仕組みのひとつです。入力されたデータを後で復元できる状態に圧縮する処理を指し、日本語では「自動符号化器」と表記されることもあるでしょう。Autoencoder(オートエンコーダ)は、現在Googleに勤務で「深層学習のゴッドファーザー」とも呼ばれているジェフリー・ヒントン氏らによって2006年に発表されました。

一般的に、データの圧縮には情報の欠落がつきものですよね。一方、圧縮により一部の情報が欠落した状態であってもデータの利用ができるよう、重要な情報については欠落させずに残す必要があるでしょう。Autoencoder(オートエンコーダ)は圧縮対象のデータ内の情報を重みづけしたのち、重要度の高い情報を選別しそれ以外の部分をそぎ落とす機能を提供します。この機能は「次元削減」や「特徴抽出」と呼ばれる機能です。

なお、圧縮されたデータはdecoder(デコーダ)と呼ばれる仕組みにより圧縮前の状態に復元され、重要度の高い情報のみを含んだデータを得ることができるでしょう。これら重要度の高い情報を含んだデータは機械学習に利用されます。

Autoencoderと機械学習の関係

機械学習のイメージ
機械学習の手法のひとつとして、ニューラルネットワーク(Neural Network:NN)という考え方を利用した手法が存在します。ニューラルネットワークとは計算ノードを脳内にある神経細胞(ニューロン)に見立て、そのノード間の繋がりを数理モデルに落とし込んだ考え方で、入力層、中間層、出力層で構成されます。一般的に中間層の数が多ければ多いほど複雑な計算が可能になります。

ニューラルネットワークにおいてAutoencoder(オートエンコーダ)は入力層で受け取ったデータを圧縮し、中間層に受け渡す役割を担っています。その後、中間層に受け渡されたデータは各種計算に利用され、その計算結果をdecoder(デコーダ)により復元することで得られたデータは出力層に出力されます。出力層のデータと入力層のデータの比較を繰り返すことで、Autoencoder(オートエンコーダ)に対し教師なし学習を実施できるでしょう。

Autoencoder(オートエンコーダ)によるデータの圧縮は、ニューラルネットワークを用いた機械学習および機械学習から派生した技術において、最も重要な工程のひとつと位置付けられており、効率的なデータの圧縮方法に関する研究が現在も続けられています。

Autoencoderの仕組み

仕組みのイメージ
Autoencoder(オートエンコーダ)とは、ニューラルネットワークにおいてデータの次元を削減し圧縮する計算方法のひとつです。

機械学習におけるAutoencoder(オートエンコーダ)の目的は、ニューラルネットワークに入力されたデータの特徴量の獲得です。例えば、入力されたデータが画像である場合、画像の色や形などのパターンが特徴にあたります。特徴量を獲得するために、Autoencoder(オートエンコーダ)は入力層で受け取ったデータと出力層から出力されたデータを比較し、元の入力が可能な限り再現されるように情報の重みづけを調整していきます。

このように、入力データと出力データの比較により重みを調整する手法は誤差逆伝播法(バックプロパゲーション)と呼ばれ、機械学習においてニューラルネットワークを学習させる際に用いられるアルゴリズムのひとつです。誤差逆伝播法を用いた重み調整を繰り返すことで、より最適なAutoencoder(オートエンコーダ)を作成することができるでしょう。

したがって、ニューラルネットワークにおいて入力層と出力層に同じデータを用いた教師なし機械学習こそが、Autoencoder(オートエンコーダ)の仕組みといえるでしょう。

Autoencoderの種類

種類のイメージ
Autoencoder(オートエンコーダ)として代表的なものを3つご紹介します。

積層オートエンコーダ(Stacked Autoencoder)

積層オートエンコーダは、入力層、中間層、出力層のセットを複数セット積み重ねた構造を持っています。したがってAutoencoder(オートエンコーダ)によるデータ圧縮とdecoder(デコーダ)による復元が複数回実施されることが特徴です。Autoencoder(オートエンコーダ)とdecoder(デコーダ)の多層化により、入力データと出力データの差がゼロに近づいてしまう「勾配喪失問題」の回避を目的としており、ニューラルネットワークの事前学習に利用されます。

変分オートエンコーダ(Variational Autoencoder:VAE)

変分オートエンコーダとは、新しいデータの生成を目的とし利用される手法です。変分オートエンコーダではAutoencoder(オートエンコーダ)により圧縮されたデータをdecoder(デコーダ)で復元する際に変数を加えて計算することで、入力データとは似て非なる新しいデータを生成できます。例えば文字が書かれた画像を入力するとまるで他人が書いたような新しい画像を生成できるでしょう。

畳み込みオートエンコーダ(Convolutional Autoencoder:CAE)

畳み込みAutoencoder(オートエンコーダ)は、畳み込みニューラルネットワークの構造に対しオートエンコーダを応用したものです。畳み込みニューラルネットワークは一般的なニューラルネットワークとは異なり、畳み込み層やプーリング層などの特殊な層から構成されています。画像処理に利用されることが多い仕組みでしょう。

Autoencoderの利用方法

利用方法のイメージ
Autoencoder(オートエンコーダ)の利用方法として2例をご紹介します。

異常検知

学習に用いたデータはほぼ元通りに復元できる特性を利用して、Autoencoder(オートエンコーダ)は異常検知に利用されます。正常データのみをもとに学習したニューラルネットワークで入力データを復元し、元通りに復元できたかどうかを調べることで異常検知が可能です。元通りに復元できないほど、正常データから離れた異常データであると判断できるでしょう。

正常な心電図をもとに学習したニューラルネットワークで不整脈を検出する方法が研究されるなど、医療分野でも期待されるAutoencoder(オートエンコーダ)の利用方法のひとつです。

画像のノイズ除去

Autoencoder(オートエンコーダ)に画像のノイズ部分をノイズとして認識させることで、Autoencoder(オートエンコーダ)は入力画像のノイズ除去に利用できるようになります。準備としてノイズを含んだ画像データを入力に、ノイズを含まないデータを正常データとしてAutoencoder(オートエンコーダ)に学習を施す必要があります。学習を終えたAutoencoder(オートエンコーダ)に対しノイズを含む画像データを入力すると、ノイズが除去されたデータが出力されるでしょう。

Autoencoderの利用で気をつけることは

注意点のイメージ
Autoencoder(オートエンコーダ)を利用する際の注意点は、初心者のうちはTensorflowやPytorchなど有名なライブラリを利用し、Autoencoder(オートエンコーダ)を自作しないようにしましょう。というのも、自作するにはニューラルネットワークや機械学習などの周辺知識に関しても十分な理解が必要です。それらの理解がないままに作成されたAutoencoder(オートエンコーダ)は、適切にデータの圧縮や情報抽出ができないでしょう。

各ライブラリのホームページには実装方法の詳細な説明が記載されているため、必ず確認してから実装することが失敗しないための近道です。また、これらのライブラリの利用方法は技術ブログなどで頻繁に取り上げられているため、行き詰った際にはこれらも参考にするとよいでしょう。

また、実際にAutoencoder(オートエンコーダ)を実装する際、ニューラルネットワークの層数などの構造をどのように設定すべきか悩みますよね。最初は様々な次元の層を実装して結果を確認することが重要です。その後は目的の結果が得られるように、ネットワークの層数や次元を増減させるなどの調整を重ねましょう。これらの調整の繰り返しにより、目的の機能を果たすAutoencoder(オートエンコーダ)を作成できます。

まとめ
さて、今回は「機械学習」を支える技術のひとつである「Autoencoder(オートエンコーダ)」についてお伝えしました。Autoencoder(オートエンコーダ)について整理すると以下の通りです。

  • Autoencoder(オートエンコーダ)は機械学習の手法のひとつであるニューラルネットワークに利用される技術であり、入力データの特徴を抽出する特性を持っている
  • ニューラルネットワークにおいてAutoencoder(オートエンコーダ)は入力層で受け取ったデータを特徴量に基づき圧縮し、中間層に受け渡す役割を担っている
  • Autoencoder(オートエンコーダ)は入力層で受け取ったデータと出力層から出力されたデータを比較し、元の入力が可能な限り再現されるように情報の重みづけを自動で調整する
  • Autoencoder(オートエンコーダ)は画像のノイズ除去や異常検知に利用されている
  • 初心者の方がAutoencoder(オートエンコーダ)を利用する際は、TensorflowやPytorchなどの有名なライブラリを利用し、Autoencoder(オートエンコーダ)を自作しないように注意する

Autoencoder(オートエンコーダ)が利用される機械学習やディープラーニングなどの技術は、分野横断的に利用が期待されている技術のひとつです。ぜひ、Autoencoder(オートエンコーダ)を実装できる有名なライブラリをインストールし、サンプルデータを入力することからAutoencoder(オートエンコーダ)の理解を始めましょう。

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました