質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.26%

  • 機械学習

    311questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • 深層学習

    19questions

深層学習でのサンプル数について

解決済

回答 3

投稿

  • 評価
  • クリップ 5
  • VIEW 383

chun1182

score 1

サンプル数を少なくする工夫について

最近機械学習を始めて、MNIST等の精度を上げるためにいろいろ調べました。
そこでふと思ったのですが、サンプル数を少なくする方法は研究とかは行われるのでしょうか。

もし人が新しい言語・数字を学習するとしたら数万個も同じ文字の例を探さずに、
正解の文字をしっかり学習することから始めるかと思いますが、機械学習はその逆を行っているように感じるので。

そういう研究・論文をどこかで見かけたことはあるでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+6

とても面白い質問ですね。

サンプル数を少なくする方法

私は聞いたことがありません。実際問題として、少ないサンプルであっても特徴を抽出するために内部では無理やり水増しして学習させるのが常套手段です。元のデータを少なくすれば少なくしただけ、結局内部でデータを増やすことになります。これは「サンプル数を少なくする方法」ではありますが、結局内部でサンプル数を増やしているだけなので、答えになっているかどうか微妙です。

もし人が新しい言語・数字を学習するとしたら数万個も同じ文字の例を探さずに、正解の文字をしっかり学習する

  • 人間の場合
    人間は、生まれてからずーっと絶えず学習しています。もし、人間が新しくサンスクリット語を覚えるとしても、学習し始めた1時間の成果ではなく、これまでの生涯を通して得てきた最強(?)の特徴量の抽出を使って太刀打ちします。
     
  • 機械学習の場合
    機械学習は問題の枠をずいぶん絞りますが、データをこねくり回して力業で特徴量の抽出を数時間や数日、数週間オーダーで行います。生後数週間の人間にこれができない(仮に理解できたとしても、とてもまともなアウトプットはできませんが…)を考えれば、これはこれですごいことだと思います。

気になって少し調べたところ、こういうようなことをquoraで見つけましたので参考までに。

要旨)
Madhulika Mukherjeeさん

  • 人間は(新しく見せられた動物などの写真)1,2枚の写真で学習しているわけではなく、生まれてきてから学習してきた成果を使って学習している。
  • 動物の写真を見て、まず「動物だな」、その後に「猫だな」のような分類処理をミリ秒単位で行っている
  • 人間の脳は10憶のノードと接続からなるスーパーコンピュータみたいなもので、高次元な特徴抽出をスマートにやっている

Menzel-Meisterさん

  • 意識していないだけで、認識や想像をする中で人間は信じられないほどの情報量をさばいている
  • 一度見た何かを将来見つけた時に、正しく評価するためにたくさんの仕分けデータが必要なのは人間も機械も同じ
  • 猫を猫と評価するのに人間は、「ふわふわな毛があって、四本足で、目が合って、色が…(個体差)」のような「猫性」を抽出して理解している

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/09 21:04

    回答ありがとうございます。
    QUORAは知らなかったので登録しました。

    おっしゃる通り、個人的な考えとしては「サンプルを少なくするためには水増しは必須と考えます。」
    これもまた人間の例ですが、私たちは色んな角度からも見れますし、どの位置に書いてあっても文字を認識するので。
    ただ角度を変えすぎると別な文字になるので難しいところでもあります。

    難しいのは人間が生涯を通して得ている(文字を認識するのに使う一般的な)特徴量をどう覚えさせるかですね、
    深層学習でやたら多い画像を必要とするのは文字を覚えるというより、その前の「線の形」の概念を覚えるのに必要なのかなと思いました。

    キャンセル

checkベストアンサー

+4

概ねslashさんの意見に同意です。
人は新しく何かを学習する時、過去に学習したデータを利用します。
転移学習のモチベーションに近いです。
https://qiita.com/icoxfog417/items/48cbf087dd22f1f8c6f4
(追記:書いてから気づいたのですが、転移学習ってサンプル数を減らすための取り組みなのでは…)


別の考え方もしてみます。

大量にあるデータから取り除いても学習結果があまり変化しないものを取り除く方法はあります。
逆に取り除くことによって精度が上がるケースもあります。
RANSACなどのアルゴリズムのモチベーションになります。
https://qiita.com/smurakami/items/14202a83bd13e55d4c09

学習というのは、何かを知ることであります。が、本質的には、ありえるカテゴリ間の違いを知ることです。

深層学習は非常に高度なマッチング問題として捉えることができます。
これを最も古典的な方法でやるのがテンプレートマッチングです。
正解だけからの距離を測ると、カテゴリ間の距離に不均衡が現れます。
1と7の違いと1と8の違いは明らかに後者の方が遠いが、同じか違うかといわれると、ともに違うことになります。
すると精度として前者が低くなることが予想されます。
システムの精度というのはワーストケースで測るべきなので、最も区別しにくいものに引っ張られてしまいます。

深層学習では畳み込みやプーリングを使って射影を行います。
そして学習時に、ワーストケースが悪くなりすぎないようにフィードバックが自然にかかります。

深層学習でやっていることは、入力データを粗視化して正解テンプレートに変換してマッチングしていると見ることが可能です。
このテンプレートを人間にわかりやすいようにではなく、定量的な指標を持って求めることが学習の目的となっています。

そこでテンプレートマッチングで精度を上げる方法を考えてみると、教師画像の枚数を増やすことが最適です。
テンプレートマッチングでは枚数を増やすと教師データ数に対して線形に計算時間がかかるようになります。
深層学習では教師データを増やしても、1枚のテンプレートに判定に有利な特徴だけを追加していると考えれば、データを用意すればするほど精度が上がる仕組みが出来上がります。

以上のことを考えると深層学習でサンプル数を減らすのはデータを集められないとき以外メリットがないのです。
逆にRandomForest、SVMなどと比べた時にサンプル数を無限に増やしても計算量が発散しないことが強みだと捉えるべきのように思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/09 22:18

    テンプレートマッチング、正解画像が問題画像のどこにあるかを調べる手法と認識しています。
    深層学習も最後にラベルの確率を出すことから、やってることはかなり近いと思います。

    ここでサンプルとは正解画像を導き出すのに使うもので、サンプル数を増やすことでその正解画像のロバスト性を高めていると考えます。
    転移学習・DCGANを使って少ないサンプルを元に自分でロバスト性を高めてくれないかなと思っています。

    初めのリンクから辿ったone-shot learningがまさに探していたものでした。
    リンクを教えていただきありがとうございます。

    サンプル数の多さがAI導入の大きな壁となっています。ビックデータを扱うレベルの団体ならば簡単に用意できますが、
    個人・中小ではこのような少ない情報を元にした個性あるAIが進むのかなとも感じています。

    キャンセル

  • 2018/01/09 22:36

    なるほど、そのような意識での問いなのですね。
    サンプルを少なくしていく、というふうに誤解していました。

    深層学習というのは比較的に統計的な手法だと考えているので、サンプル数が少ない、サンプル数を多く取れない、といったケースでは不利であることが多い印象です。
    取り組みたい問題に対する事前知識があれば改善するのはどの手法でも同じかもしれません。

    Krigingのような手法で位相空間内でサンプリングすべき点を挙げることによって少ないサンプリングで精度を上げる方法もありますが、今回の話題とは少々質が異なる話かもしれません。

    キャンセル

+2

こんにちは。
IBMのWatsonを、業務の都合で半年ぐらい使っている、素人じゃないけどプロじゃないものです。

企業秘密的なところもあり詳しくはいえないのでご参考までですが、(初回)学習というより追加学習で、どういうサンプルを食わせるかで大きな差が出るということはあります。
要するに、そのAI(DL)が、どういう誤答をするかをよく見極めたうえで、追加学習させるデータを作ると、少ない「学習」でも精度が大きく改善するということです。人間も、どこが「苦手」かをよく見極めて、それを克服するように「学習」するのがよいわけで、それと同じことだと思いますね。

ご質問の趣旨に合うかどうかはわかりませんが、ご参考まで。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 22:56

    これは確かにそう思います。

    理想としては機械側が少ないサンプルから学習して分類をある程度してから、
    「こことここの間のこの答えを教えてほしい」と聞いて来るのがよいと思いました。

    これは「a」か「d」か、「6」か「0」か。のホント微妙なところだけ教えるだけでよいというのがいいですね。

    回答とは関係ないですが、書き順の概念も文字認識では重要かもなとふと思いました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.26%

関連した質問

  • 解決済

    gmaps.jsを活用した際に、地図が表示されない!!

    お世話になっております! 現在gmaps.jsを活用して、ジオコーディング(住所を検索すると、その場所がピンで表示される)ページを作成しようと思っているのですが、google m

  • 解決済

    コールバック関数の表現方法について

    とても初歩的な質問なのですが、 コールバック関数を呼びだす処理を設計書に記載する場合など どのように表現したほうがわかりやすいでしょうか? たとえば、以下のような処理の場合は $

  • 解決済

    pythonののインポートについての質問

    Python2.7.11をMac OSX El Capitanで使用しています。 今回urllib2を使ってみようとimportしたのですが、なぜだかエラーが出てきました。以前使

  • 受付中

    ESPLIBを用いた画像の連続撮影

    以前、こちらで教えていただいた、ESPLIBを用いた画像の連続撮影を行うことで、フレーム落ちの改善を実現しようとしています。 教えていただいたプログラムを改良しながら、進めて

  • 受付中

    autocomplete jqueryの様に

    autocomplete jqueryのサジェスト機能のようにセレクトボックスにフォーカスをあてたたまま、候補の項目が表示されたら下キー(event.keyCode == 48)

  • 解決済

    UWSCにてスレッド(並列)処理したい

    UWSCにてスレッド処理(並列処理)にて、複数サイトのスクレイピングをしてほぼ同時にデータを取得するコードを教えてください。 実際に5つIEを同時に開いておいて、10秒おきに

  • 解決済

    hover した時の cssが適応されません

    画像にマウスを重ねたときに、キランと光るようなエフェクトをネットで見つけ、ぜひ実装したいと思いました。 (https://codepen.io/nxworld/pen/ZYNOBZ

  • 解決済

    【WebSocket】1つのクライアントから複数WebSocket接続

    現在Goとjavascriptでチャットができるアプリを作成しています. ただ,複数のチャットルームが同時に1画面で見えるように実装しようとしたいのですが, 1つのクライアントから

同じタグがついた質問を見る

  • 機械学習

    311questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • 深層学習

    19questions