【線形代数の基礎】機械学習・ディープラーニングでも必須の演算
時代の最先端である人工知能(AI)や、ロボットを開発するエンジニアを志す方は多いでしょう。
しかし、専門性の高い職業であるため、「何から勉強したら良いのかわからない」「専門書を読んでも難解すぎて理解できない」などと、諦めかけてはいませんか?
実はこれらの分野では、専門書を読むために必要な知識があるのです。
その中のひとつが、「線形代数(せんけいだいすう)」です。
特に、人工知能開発での機械学習やディープラーニング(深層学習)を行う上で、線形代数の知識は必須となります。
しかし、理工系の大学で数学を専門的に学んできた人でない限り、線形代数という言葉すら知らないということもあるでしょう。
線形代数は数学の中でも、さまざまな分野に応用がきく学問です。
ここでは、線形代数の基礎的な知識について説明していきます。
Contents
【線形代数の目的】機械学習には線形代数が必要?
機械学習とは、人工知能における研究課題のひとつで、人間と同様の思考パターンをコンピューターに学習させようとする技術または手法のことです。
機械(コンピューター)に学習させるためには、学習のもとになる大量のデータを入力する必要があります。
それを活用する具体例としては、以下のようなものが挙げられます。
膨大な患者のカルテから、患者の生活様式や体質・病名などを分析して、病気の傾向を割り出す
膨大な写真データの中から、特定の人物が写っている写真だけを識別し選別する
コンピューターは、これらのデータを「機械学習アルゴリズム」で分類・認識させて、最適な処理を見つけ出します。
この一連の処理を何段階も繰り返すことで、まだ学習していないデータに対しても、分類や識別をすることができるようになり、既存のデータから未来を予測することが可能となります。
「機械学習の仕事の9割はデータセットにある」といわれるほど、機械学習においてデータセットは重要です。
データセットの前処理として行列の演算を行う際、行列の基本的な役割や扱い方の知識が必要となります。
また、地図や写真などのデータはそのまま計算することは困難ですが、ベクトルの概念を使用すれば、これらを行列の数式へ変換することが可能です。
行列やベクトルの知識と概念は、大量のデータをまとめて処理し、簡潔に書き表すことができるので、機械学習に役立ちます。
線形代数を学ぶことで、機械学習で使われるアルゴリズムをより深く理解でき、機械学習を使ったシステムやサービスの設計がしやすくなります。
まずは基礎を理解する
線形代数は、もともと効率のよい連立方程式の解法を考えるために考案された学問です。
非常に応用範囲が広かったため、いまでは数学の一大分野となりました。
機械に学習をさせるためには、あらゆることを数値として入力しなければなりません。
線形代数を使うと、図や3D空間など、数字以外ものを計算式に変換することができます。
具体的には、平面の図を2次元、空間を3次元、その座標を計算式として四則演算することが可能です。
またベクトルの概念を覚えると、行列の計算式を見ただけで、その計算式が表す図や3D空間をイメージできるようになります。
たとえばバーチャルリアリティーのような3D空間で、物を動かすプログラムなどを作るときに非常に役に立つでしょう。
さらには、人間の想像できない4次元や10次元でも、線形代数ではn次元として計算することが可能です。
これは、量子コンピューターを扱う量子力学の分野などで役立ちます。
ここでは、そんな機械学習に役立つ線形代数の中でも、主に関係のある「行列」と「ベクトル」を中心に解説します。
この解説は、プログラミングに応用できる形で、初心者にもわかりやすいように一部簡略化して記載しますので、厳密な定義については各自で学習し理解を深めましょう。
ベクトルとは
ベクトルとは、基本的に「向きと大きさを持つ量」のことを指します。
一方、大きさのみで表され、方向を持たない量のことを「スカラー」といいます。
式においては、行列の形や変数ではなく、単体で書かれた数字で表されます。
また、ベクトルにはいくつかの種類があります。
位置ベクトル
平面(2次元)や空間(3次元)上のある点を、原点からの座標で表したもの
幾何ベクトル
原点ではなく、ある位置からある位置への向きと大きさを表すもの
矢印で表すことができる
空間ベクトル
空間内のある有向線分から、その位置情報を無視して「向き」と「大きさ」だけに着目したもの
数ベクトル
単に数の集まりを示すもの
この解説で扱うベクトルは、主に「位置ベクトル」と「幾何ベクトル」になります。
基底について
基底を分かりやすく説明すると、全体を表現するのに必要最低限のベクトルたちのことです。
詳しくは
- それらの一次結合で全てのベクトルを表現できる
- それらは一次独立である
という条件を満たすベクトルの集合のことを指します。
単位ベクトルについて
長さ(大きさ)が1であるベクトルのことを「単位ベクトル」といいます。
大きさが1なので、目盛りのような役割をすることもあります。
線形独立なベクトルについて
2本以上のベクトルが重ならず別の方向を向いているとき、これらのベクトルを「独立なベクトル」といいます。
正確には、「1次独立なベクトル」あるいは、「線形独立なベクトル」といいます。
線形結合について
線形結合とは、いくつかのベクトルあるいは関数があるとき、それぞれを定数倍したものの和のことです。
「1次結合」ともいいます。
基底ベクトルについて
基底ベクトルとは、線形独立なベクトルから形成される集合のことです。
そのベクトルにおける線形結合として、ベクトル空間ですべてのベクトルを表すことが可能です。
ベクトル空間について
2次元空間では、互いに平行でないベクトルが2つあれば、その線形結合ですべての平面を表すことができます。
この関係は3次元空間にも応用が可能で、互いに平行でないベクトルが3つあれば、空間を表すことができます。
この空間を、「線形空間」または「ベクトル空間」といいます。
部分空間について
部分空間とは、あるベクトル空間の部分集合にあたるベクトル空間のことです。
「線形部分空間」や「部分ベクトル空間」と呼ぶこともあります。
線形写像について
線形写像とは、1次関数で変数に値を代入する時のように、変数と変数を対応づけることです。
たとえば、「y=f(x)」という式があるとき、fのことを写像といいます。
ここで、すべてのxについて、fが次の性質を満たす時、fを「線形写像」といいます。
- f(x+y)=f(x)+f(y)
- f(cx)=cf(x)
これは、原点を通る直線の式を表す、1次関数「f(x)=ax」を一般化したものです。
具体的には、ベクトルを特定の方向に拡大・縮小することだとイメージしてください。
行列とは
行列は数字や文字を、長方形や正方形に並べたものです。
縦横方向に、数字や文字を入れたブロックを並べた状態をイメージしましょう。
行列をベクトルの一種と考えると幾何ベクトルにあたり、横に並べたものを「行ベクトル」、縦に並べたものを「列ベクトル」といいます。
また、横向きに並ぶ方を「行」と呼び、縦方向に並ぶ方を「列」と呼びます。
仮に3行4列の行列があれば、「3行4列の行列」または「3×4行列」と呼びます。
さらに、この行列を構成するブロックの一つひとつを「行列の成分」といいます。
行列式について
行列式とは、n次正方行列の数字を、規則に基づいて計算した結果のことをいいます。
これを「行列式の値」ともいいます。
計算例を見たほうが理解を深めやすいため、参考書などで調べてみましょう。
正方行列について
行要素の数と列要素の数が一致する行列を「正方行列」といいます。
単位行列について
行数と列数が等しく、左上から対角線上に1が並び、その他の成分がすべて0になる行列のことを「単位行列」といいます。
対角行列について
正方行列のうち、対角成分以外の成分がすべて0の行列を「対角行列」といいます。
単位行列も対角行列のひとつです。
対角化とは
「対角化」を説明すると以下のようになります。
- 正方行列を線形変換を用いて、もとの行列と相似な対角行列に変形すること
- ベクトル空間の線形写像に対し、空間の基底を取り替え、その作用が常にある方向(固有空間)へのスカラー倍(固有値)として現れるようにすること
行列やベクトルを対角化することで、無駄な計算量を大幅に省くことかできます。
逆行列について
実数 a にかけたら 1になる数のことを「逆数」といいます。
また、行列Aにかけたら単位行列 E になる行列のことを「逆行列」といいます。
逆行列とは、「逆数の行列バージョン」と考えるとよいでしょう。
正則行列について
逆行列が存在する行列のことを「正則行列」といいます。
行列の基本変形について
「行列の基本変形」とは、以下の手順で行列を計算することです。
- ある行を何倍かする
- ある行を何倍かして別の行に加える(別の行から引く)
- ある行と別の行を入れ替える
この方法で、連立方程式を解くのと同じように、行列から解を求めることができます。
具体的な数式例を参考書などで確認すると、さらに理解しやすいでしょう。
小行列と余因子行列について
「小行列」とは部分行列ともいい、ある行列から、一部の行または列を取り除いてできた行列のことを指します。
その小行列式は「小さな」行列式、「Minor(マイナー)」ということで「M」という記号が用いられます。
「余因子行列(余因子展開)」は、小行列式にプラスまたはマイナスの符号を加えて得られた行列のことを指します。
こうして、大きな行列を小さな行列の集まりとして捉えることで、計算の効率を上げることが可能です。
線形代数には他にもいろいろな法則がありますが、基本の概念が理解できていれば、参考書を読む際にも内容が理解しやすくなるでしょう。
【線形代数の理解】エンジニアとして線形代数を理解する
機械学習エンジニアは、AIがAIらしく振舞うために重要な機械学習アルゴリズムを開発できるエンジニアです。
しかし、たとえITエンジニアの経験者でも、機械学習エンジニアになることは容易ではありません。
最低でも「Python」などのプログラミングの知識や、機械学習のアルゴリズム、データベースやモデリングの知識、そして数学の知識が必要です。
それではエンジニア目線から、具体的な言語やツールなどを例に出して解説していきましょう。
機械学習で使用する言語
機械学習に使用するプログラミング言語で最も有名なものは、「Python」です。
Pythonはシンプルなシンタックス(文法)で初心者にも学びやすく、大企業でも開発に使われているプログラミング言語です。
また、Python対応のIDE(エディタ、デバッガ、コンパイラをひとつにまとめた統合開発環境)に「PyScripter」があります。
PyScripterは、オープンソースのwindows用開発環境で使い勝手が良いツールのため、初心者にもおすすめです。
ディープラーニングの分野でも、多くのソフトウェアがPythonで動作しています。
- TensorFlow(Googleが開発したディープラーニングのフレームワーク)
- PyTorch(Facebookで研究用途に使用されているディープラーニングのフレームワーク)
さらに機械学習のスキルアップをはかるには、プログラミングをしながら線形代数を学ぶこともおすすめです。
参考になる本を紹介します。
■ プログラミングのための線形代数 著者:平岡 和幸氏、堀 玄氏
出典:https://www.ohmsha.co.jp/book/9784274065781/
【本の詳細URL】
https://www.ohmsha.co.jp/book/9784274065781/
■ 行列プログラマー -Pythonプログラムで学ぶ線形代数 著者:Philip N. Klein氏
出典:https://www.oreilly.co.jp/books/9784873117775/
【本の詳細URL】
https://www.oreilly.co.jp/books/9784873117775/
Pythonライブラリ「NumPy」
「NumPy」は、Pythonのオープンソースライブラリで、大規模な多次元配列や行列の演算など、科学技術計算を効率的に行えます。
Python単体でも大規模な多次元配列等の処理は可能ですが、膨大な手間と時間を要するため、機械学習ではNumPyを使って処理するのが一般的です。
NumPyを扱えるようになることは、機械学習エンジニアにとって「最初の一歩」といえるでしょう。
Pythonライブラリ「Pandas」
Pandasは、データ操作を高速かつ効率的に扱う「データフレーム形式」を用いて、データ解析を支援する機能のPythonライブラリです。
100万件あるデータを解析して、別の100万件のデータと比較して…などの処理が求められる時、このライブラリが役に立ちます。
データセットの解析・処理を効率的に進めるには必須のライブラリです。
初級の機械学習エンジニアにとって、Pandasをストレスなく使えることが重要なスキルといえます。
線形代数を最短で学習する方法はあるのか?
線形代数は理工系の大学では1年生で習うレベルの学問です。
微分積分やベクトルなどを理解していれば、基礎的な線形代数の知識を身につけることは難しいことではありません。
線形代数の知識は、独学で学ぶことも可能です。
独学の際の勉強のコツは、テキストや参考書を元に、演習問題をひたすら解いていくことです。
おすすめの参考書は、大学の講義でも教材として使われる「マセマ出版社」のシリーズで、線形代数の基礎的な学習に適しています。
また、エンジニアを目指している人、あるいはすでにエンジニアとして働いていて、さらに上を目指すために線形代数をしっかりと学びたいと考えている人であれば、エンジニア向けの線形代数の参考書で学ぶのが効率的です。
まったく数学の知識がない方は、スクールの講座や勉強会セミナーへ参加して理解を深めることもおすすめです。
パーソルクロステクノロジーでは、「資格取得インセンティブ制度」を設け、エンジニアの資格取得をサポートしています。
ほかにも、さまざまな「スキルアップ支援」をご用意しています。
資格取得、研修受講など、ご希望に合わせてぜひご活用ください。
エンジニアにとって線形代数は必須の知識
機械学習エンジニアにとって、基礎的な数学は必要不可欠な知識です。
中でも線形代数は、さまざまなジャンルに応用されている数学なので、文系出身のエンジニアでも身につけておいたほうがよい知識といえます。
線形代数を学んで、スキルアップや新しい分野の仕事に役立てましょう。
- 機械学習やAIを扱うエンジニアにとって線形代数は必要不可欠
- 線形代数の基礎知識として、行列やベクトルの概念などを理解しておく
- プログラミング言語Pythonと線形代数を合わせて学習すると効率がよい