AI(人工知能)に関する用語で、DNN(ディープニューラルネットワーク)という言葉を聞いたことがある人もいますよね。
DNN(ディープニューラルネットワーク)とは、AI(人工知能)が行う機械学習の方法の1つです。現在、AI(人工知能)の技術は目覚ましく進歩しています。囲碁や将棋の世界ではトップ棋士対AI(人工知能)の対戦が行われ、AI(人工知能)が勝利することもしばしば。それを可能にしている技術が、AI(人工知能)自身が学習し成長する機械学習というわけです。その機械学習の1つであるDNN(ディープニューラルネットワーク)は、AI(人工知能)の未来を切り開く技術として注目されています。
ということでこの記事では、DNN(ディープニューラルネットワーク)について、わかりやすくお伝えします。
DNN(ディープニューラルネットワーク)とは
まずはDNN(ディープニューラルネットワーク)とは何かについてお話しします。
DNN(ディープニューラルネットワーク)はその名の通り、従来のニューラルネットワークにさらに深い階層を加え情報処理能力を高めたものです。ではニューラルネットワークとは何かというと、人間の脳内の神経伝達回路(ニューロンやシナプス)をコンピューター上に模したプログラムのことを言います。
DNN(ディープニューラルネットワーク)というシステムを活用することで、AI(人工知能)が人間と同じような情報認識・処理判断を行うことが可能となります。
DNN(ディープニューラルネットワーク)はなぜ誕生したのか
従来のニューラルネットワークは合計3層で構成されていたため、認識精度が低かったり、複雑な情報になると処理できないなどの課題がありました。人間の脳をコンピューター上に再現しているにもかかわらず、単純な情報処理しかできなければ実用化は困難です。
そこで近年注目されている「ディープラーニング」の手法を用い、中間層(隠れ層)を多層にすることで、情報処理能力を向上させることができたのです。ディープラーニングの開発と進化が、DNN(ディープニューラルネットワーク)誕生のきっかけとなりました。
DNN(ディープニューラルネットワーク)とCNN(畳み込みニューラルネットワーク)の違い
複雑な情報処理も可能にするDNN(ディープニューラルネットワーク)ですが、課題もありました。開発当初のDNN(ディープニューラルネットワーク)では、入力情報の多次元的な情報が無視されてしまっていたのです。画像データなどの2次元や3次元情報が、1次元情報に変換されてしまい、情報処理が非効率的になり、精度が落ちてしまっていました。
そのような課題を解決するために開発されたのがCNN(畳み込みニューラルネットワーク)です。中間層(隠れ層)に畳み込み層とプーリング層という新たな層を設けることで、2次元や3次元の情報をそのまま処理することが可能になりました。CNN(畳み込みニューラルネットワーク)は複数あるDNN(ディープニューラルネットワーク)アルゴリズムの1つであり、主に画像認識や音声認識に使用されます。画像認識はDNN(ディープニューラルネットワーク)技術の主戦場であり、CNN(畳み込みニューラルネットワーク)はディープラーニングの基礎となっています。
DNN(ディープニューラルネットワーク)を応用した例
では、実際にDNN(ディープニューラルネットワーク)技術はどのような分野に使われているのでしょうか。DNN(ディープニューラルネットワーク)の活用例を紹介します。
医療画像処理への応用
MRIなどの医療用画像にDNN(ディープニューラルネットワーク)を利用することで、がん細胞など病変部位の検出が効率的にできるようになります。DNN(ディープニューラルネットワーク)以前の病変部位検出手法ではできなかった、識別に有用な特徴量の発見と識別器のデザインとを学習により同時におこなうことが出来るのが特徴です。自動学習のための画像データを多数用意する必要があるなどの課題はありますが、より効率的な実用化に向けての検証が進められています。
自動運転技術への応用
自動運転の実用化において、DNN(ディープニューラルネットワーク)の活用は重要な役割を担っています。自動運転時の安全性の確保には、周囲の物体や信号の正確な認識が必要不可欠です。DNN(ディープニューラルネットワーク)の進化によって、車に搭載されているカメラから得られる画像データの正確な検出・解析が可能となり、人が運転している状態と同様の運転制御が実現します。
DNN(ディープニューラルネットワーク)を実装するためのステップ
日常生活の中でも活用されているDNN(ディープニューラルネットワーク)ですが、実装される際はどのような処理が行われるのでしょうか。ここでは、DNN(ディープニューラルネットワーク)を実装するためのステップについてお話しします。
DNN(ディープニューラルネットワーク)は主にPythonというプログラミング言語を用いて実装します。その工程を以下に記載します。
affine変換の入力
各層を結合する部分(重み)の計算を行います。人間の脳で言うところのシナプス結合の強さに該当します。
中間層の活性化関数の入力
中間層(隠れ層)の活性化関数を入力します。人間の脳で言うところの、ニューロンにおける電気信号の伝達(発火)の可否を表します。ある一定の値(閾値)を超えた場合、次の層へ情報が伝えられます。ReLU関数が用いられることが多いです。
出力層の活性化関数の入力
入力層から中間層(隠れ層)を通じて伝えられてきた情報を元に予測される結果を表示します。中間層(隠れ層)とは異なり、ReLU関数はほぼ使われません。
誤差関数の入力
予測データと正解データの比較に誤差関数を用います。データを分類するような処理の場合は、交差エントロピー誤差を利用します。
上記プログラミングされた関数を元に、初めに入力されたデータが検証・解析され、予測データとして出力されます。この、入力層から順を追って処理され、出力層までたどり着くことを順伝播と言います。順伝播を行い予測データが出力された後は、正解データとの誤差を縮める作業を行う必要があります。
DNN(ディープニューラルネットワーク)を実装する時のポイント
DNN(ディープニューラルネットワーク)の実装についてお話ししましたが、その際に考慮すべきポイントがいくつかあります。
まず、活性化関数や誤差関数は多様にありますが、それぞれ特徴がありますので適材適所で用いることが必要です。例えば、中間層(隠れ層)で多く使用されるReLU関数はその特性から出力層では使用されません。出力層では、そのデータ解析の内容によって、softmax関数や恒等関数などが使い分けられます。より適した活性化関数を使用しなければ、データ処理の時間が不要に長くなってしまったり、正解データとの誤差が大きくなってしまいます。
次に、「過学習」という問題への対応があります。DNNは通常学習用のデータを使って機械学習を行いますが、学習用データで学習を行いすぎた結果、学習用データに対する精度は高いものの他の未知なるデータに対する精度は低い(汎用性がない)という状態に陥ってしまう可能性があります。過学習の問題に対して、学習用データを多く用意する(汎用性を高める)ことや、ドロップアウト(重みの自由度を強制的に小さくする)などの方法がとられています。
また逆伝播の過程でも、注意が必要です。DNN(ディープニューラルネットワーク)における理想は、予測データと正解データの誤差を最も小さくすること(大域的最適解を見つけること)ですが、勾配降下法で必ず大域的最適解を見出せるかと言うと、その保証はありません。勾配降下法を用いて誤差を小さくしていきますが、得られた値が局所的最適解(その周囲では最適解だが、全範囲での最適解かは不明)の可能性もあります。局所的最適解でもよしとする場合もありますが、いかに大域的最適解を見つけるかという点において、現在も研究が進められています。
さて、今回はDNN(ディープニューラルネットワーク)についてお話しさせていただきました。「DNNって最近よく聞くけど、詳しいことはよくわからないな」という方も、その概要についておわかりいただけましたよね。
DNN(ディープニューラルネットワーク)は現在もそのシステムについて研究・開発が重ねられています。機械化や自動化が進む現代社会において、AI(人工知能)が人間と同じように物事を判断、制御できるようになるためには、DNN(ディープニューラルネットワーク)のシステムは必要不可欠です。医療や自動車産業のみならず、農業や宇宙工学など様々な分野において実用化されています。
DNN(ディープニューラルネットワーク)がより活用されることで、私たちにより豊かで便利な暮らしをもたらしてくれることは間違いありません。
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。