Archive for the ‘講義/実験’ Category

半強制的に質問させる

金曜日, 11月 15th, 2019

今学期から開講のデータマイニングな話。私自身大雑把にしか把握していない部分が多くて、どういうストーリーで何を題材に盛り込むかあれこれ考えつつ教材準備する日々。忙しいですが、楽しいです。

授業中の討論も採点対象にするということで、単に「質問ない?」ではなかなか出ないので、こちらから質問投げかけるのは当然として。予習復習や課題中に気になる点があればそれを書き込める場所を google ドキュメント、slackに用意しておいて、タイミング合えば授業前に対応しつつ、それとは別に授業中にも質問の意図確認やそこから話を広げるといったこともやってみてます。レポート報告させて、それをベースに討論してみたり。素朴な点に対する疑問とか面白い指摘をしてくれるので、私も楽しいです。ネタはどこに転がってるか分からないものだし。

もうちょっと時間かけて丁寧に資料作りたいけど、今年度は後半がどんどん雑になりそうな予感。うーみゅ。

新講義の開始

金曜日, 10月 4th, 2019

データマイニングが始まりました。2019年度開講という割には昔からある名称。内容的には、知能情報コースにおける2年次選択「機械学習」や、統計などを道具として使おうという応用的な位置づけとして設計してみてるつもりです。

一方で、受講生全員が機械学習を一度学んでいる訳でもないのが難しいところで、最低限の入門編はやろうということで、2週間入門+2〜3週間で数値データに対する前処理をやってもらうことで全体の流れを掴んで貰う予定です。

残り10週弱ぐらいで、自然言語処理、その他のタスクやアルゴリズムの紹介。

どこまでやれるか分かりませんが、一緒に頑張りましょう。

実験3・データマイニング班の発表会

水曜日, 7月 31st, 2019

明日になりますが、データマイニング班の発表会があります。興味のある人はどうぞ〜。

日時: 8/1(木), 3限目
場所: 地創棟508

Group 1: LinearRegressionを用いたアニメタイトルの略語予測
概要: アニメのタイトルなど様々なものの略称には何かしらルールがあるものと仮定する。我々は略前略語のタイトル群を教師データに、主に回帰分析などの様々な機械学習手法を用いてその法則性を発見することを目的としている。さらに略前のタイトルから、これから略されるであろう略称を予測し提供することを最終目標にしている

Group 2: インスタ映えする画像の判別機
概要: インスタグラムユーザがよく使う「インスタ映え」を投稿された画像から推定し,インスタ映えする画像かどうかを判別するモデルを,CNNを用いて作成する. 「インスタ映え」を満たす要素を判別するモデルを個別に作成し,それらのモデルを用いて, 入力画像をクラシフィケーションする。

Group 3: バズりやすい動画の予測分析 ( YouTuber編 )
概要: YouTubeにある動画の中でヒカキンTVがどのような動画でバズるのか予測分析する。回帰分析や決定木を用いてバズるための特徴量を探し、その特徴量が多く含まれるジャンルの動画はどういったものかをクラスタリングする。

Group 4: ポケモン画像のタイプ分類
概要: ポケモンの画像とそのポケモンのタイプを学習させることにより、与えられたポケモン画像のタイプを判別することを目的とした。CNN を利用し、多クラス分類や多ラベル分類、クラスタリング、ランダムフォレストまたデータ数が十分でなかったため交差検証、データ水増しを行った。これらのことからポケモンのタイプ判別に対して、どの手法が適しているかを検証した。

Jupyterが正義という訳でもない

木曜日, 6月 27th, 2019

3年次の学生実験は、教員一人あたり数人〜10数人程度での実施になることが殆どなので、その分細かい指導がしやすくて。データマイニング班前半はこんな感じで、授業寄りの基礎演習をやってて、後半はグループ単位での開発実習をやらせてます。

これも単に「やってて疑問に思う所あったら聞いてね」とか、「たまに見て回る」ではなく、進捗確認を兼ねた作業レビューをしています。ここでいう作業レビューとはペアプロとかモブプロに近いもので、大型モニタに接続して貰った状態で、内容確認しながら作業してもらい、その様子を見て気になる点へアドバイスし、実際に一緒に問題発見してみたり、修正してみたり、場合によってはググり方とか考え方を提示するに留めて考えさせてみたり、といったことをやっています。

ここ数年でよく見る宜しくないパターン(=Jupyter広まってから増えてるパターン)は、

  • デバッガを使うことを意識していないケースが少なくないこと。
  • Jupyterで書いて、後でライブラリとして使うように整理し直すことをしないこと。(毎回そこからコピペでその後も作業しがち)
  • Numpy/OpenCV/TensorFlowとか便利なライブラリ使いつつ、ドキュメント参照しないこと。(怪しい解説記事を鵜呑みにしがち)

かな。関数の戻り値が何なのか分からないまま、に使ってるとかありがち。

printデバッグが多いとか、ググる際のキーワードの不適切さ(バズワードだけで検索するとか)は昔からか。

そういうのも含めて、実際に目の前で見ながら指摘してあげることができる時間ですね。プログラミングに限らず、こういう「実際の過程」に対するレビューというのは、一子相伝じゃないですが、それなりに価値があることだと考えているので、やめるつもりはありません。

私の指摘事項が古くなるという側面はありますが、、(遠い目)

次元の呪いや過学習をイメージできるのが山場の一つ

木曜日, 5月 16th, 2019

データマイニング班の目標の一つが、

[ 解説記事: 怪奇!! 次元の呪い – 識別問題、パターン認識、データマイニングの初心者のために ]

を読んで、ある程度のイメージを得られること。これまでの流れとしては、
・簡単なモデルを例示し、
・そのモデルを仮説としたときの適切なパラメータを求めたい。
・そのために損失関数を定義し、
・その関数が最小となるパラメータをOLS/GDで求める。
・これだけでは「そもそも仮定としたモデルがどの程度妥当なのか」を説明できない。
・それ以前にデータセットにはエラーやノイズが交じる。
・データセットを信用しすぎて学習した状態を過学習と予備、それをどうにか避けたい。
・代表的なアプローチがペナルティ項の導入や、交差検証でチューニングしたモデルに対するテスト。

みたいな話をしてきてて。これらの振り返りや、説明が足りていない部分を補う意図で、毎年、前述の解説記事を読ませています。割と好評。

共通概念がある相手とのやり取り

火曜日, 5月 14th, 2019

輪読とかゼミとか、2名以上で言葉なり図式なり何かしら言語を介しながらやり取りしてる時。もし、相手が何を尋ねているのか分からないのであれば素直にそのことを伝えよう。分からないままに悩むのは時間が勿体無いし、相手がいなくてもできることなので自分一人の時にやれば良くて。考える時間が欲しいならそう伝えるのも一つの手。相手がそれを汲み取ってくれるとは限らないので、できるだけちゃんと言葉で伝えるのが重要。

ということをやるのがコミュニケーション能力であって、自己紹介がとか普段の会話をはずませる力とかではない。後者もできるにこしたことはないだろうけども、複数人で問題解決を行うとかの場面では必須ではないですね。まずは、問題解決に向けたやり取りをできるようになろう。

「英語で日常会話レベル」とかが安易なレベルとして位置づけられてるかの如く用いられることありますが、どちらかというと日常会話というのは難しくて、あらゆる想定外の話題が出てくる可能性があるのでそもそも難しいのだよな。それに対して、輪読とかゼミとか何かしら目的が決まってて、分野も絞られているなら、それなりに同じ考え方・同じ用語を使うことで通用することが多いので、その分、楽です。

ということで、大学院でやってる英語での輪読は、練習の場として活用しましょう〜。(ここ最近は割とよく議論出来てて良い雰囲気だと思う)

関数定義

金曜日, 5月 10th, 2019

プログラミング1は、if文、for文は触ってたので既にインデントやブロックの概念は教えていますが、その振り返りも兼ねて今回は「関数定義」な話。

単純な例を示しつつ、一連の命令群に名前をつけるて定義すること。定義した関数の使い方。戻り値が必要な場合と不要な場合。スライドでは「ここからここまでが関数定義の範囲」「ここがTrueブロック」とか示してたので、それがない状態でブロックを自分で把握するという話。2次方程式の解の公式を実装させてみる練習(短い時間だったけど数人実装できてた)。とかとか。

毎年微妙にやる順序が変わってるのだけど、これまでと比べるといい感じに進められてるのかも。

OLS vs GD

木曜日, 5月 9th, 2019

までやったという訳でもないですが、データマイニング班の機械学習の基礎を抑えるということで、線形回帰モデルを例に前回「モデルとは何か、パラメータを求めたら良いのか」みたいな話をしてて。

今回はそれを実際に実装してみようということで、クラス設計〜テスト駆動開発〜OLSの実装に向けた式展開〜実装、を体験してもらい。GDについては式展開だけをしておき、fit関数を実装してみてる演習時間にしました。流石にいきなりの実装は難しかったっぽいが、ま、内部のイメージを少しでも持ててもらえれば。

機械学習のイメージを持たせるモデルをパーセプトロンにした方が良いかなと思いつつ、今の所は毎回線形回帰にしてます。特に主義があるというよりは、線形回帰の考え方を知らずに卒業させるのに抵抗があるぐらいの気持ち。ただ、知能情報コースになってからはデータサイエンス基礎の中でやってるようなので、より実装中心の設計にして時間を短くすることはできそうかな。とはいえ、モデルの背景やら含めた考え方を忘れた人が、そのまま実装っぽいことをやってみたとしても無駄な時間になりがちなので、最低限の説明はどうしても必要になりそうではある。

同じく「知らずに卒業させたくない」という理由で、主成分分析もやりたいと思いつつ、実験がメインの授業でそこまで講義時間取るのもなということでやれてないな。あれこれ細かい部分については後期に新しくやる専門科目に取り込んでみる予定ですが、予定は未定ともいうな(何)

モデル

木曜日, 4月 25th, 2019

デジタル大辞泉でいうところの3番目、「ある事象について、諸要素とそれら相互の関係を定式化して表したもの。」の方。

3年次実験のデータマイニング班で、ツールの一つとして機械学習外観する流れでモデルの話を。概念的な話だけでは伝わらないし、概観したいので、例示として線形回帰を題材に、
・何がモデルで、
・モデルを導入することで何をしたいのか、
・このモデルにおいて何をすることが学習なのか、
・機械的に学習させるにはどうしたら良いのか、
といった話をしてました。

実験なので手を動かす部分も用意しましたが、今はまだ勉強部分がメインですね。

penalization term against overfitting

火曜日, 4月 23rd, 2019

データマイニング論は留学生いるので英語で輪読。私自身の英語練習になるのも悪くないですが、学生の演習として使って欲しいし、どこで躓くかは人それぞれなので質問して欲しい。ということで強制的に質問させてみてます。

先週は「授業終了後に質問した人をチェック」したこともあって、今週からは質問がそれなりに出てて、いい感じぽい。実際、発表資料では説明飛ばされてる箇所だったり、もしくは教科書でも省略している箇所についての質問が出たりしてて、面白いです。「何でここで log 導入するの?」とか。素朴な疑問から得られる学びは大きいので、どしどしやってください。

過学習の話についてはUnderfitting vs. Overfittingが掴みやすいはず。一つの解決策としてペナルティ項の導入という話については、Plot Ridge coefficients as a function of the regularizationか、Overfitting in Machine Learning: What It Is and How to Prevent It辺りが分かりやすいかな。