創造情報学連携講義VII 連絡用サイト 2015



 シラバス

今やWeb技術は人々の日常生活に深く溶けこみ、生活インフラの一部になっている。人々はWeb上で買い物をし、メールを読み書きし、動画を共有し、地図を閲覧したりと、作業の場所がローカルコンピュータからWeb上に集約されるようになってきた。膨大なWeb上の情報を整理し、世界中の人々がアクセス可能になるためには、これまで以上に高度な情報処理技術が必要となる。また、Webから知識をマイニングし、その知識を応用した新しいサービスも生まれてきている。本講義では、Webに関連する様々なプロダクトの設計・開発・運用に携わるエンジニアが、以下のようなトピックに関して、各システムを裏で支える最先端の情報処理技術、運用上の工夫などを実例を交えながら紹介する。
 

 講義日程

  • 5/28/2015:   統計的機械翻訳 (工藤担当)
  • 6/4/2015:    大規模分散処理システム(仮題) (鵜飼担当)
  • 6/11/2015:  講師出張のため 休講
  • 6/18/2015:   東日本大震災と情報処理 (仮題) (賀沢担当)
  • 6/25/2015:   ユーザインターフェース・ユーザインタラクション (石塚担当)
  • 7/2/2015:     地理情報処理 (後藤担当)
  • 7/9/2015:     次世代Web・プロトコル (吉野担当)
  • 7/16/2105:   機械学習とその応用 (栗原担当)

日時・場所

講義の進め方

  • 講義は工藤が取りまとめを行い、Googleの各部門のエンジニアが各々のトピックでレクチャーを行なう
  • 実際の製品を開発しているエンジニアが講義を行なうため、内容はより実践的なものになる予定。できるだけ質疑応答の場を設ける
  • 評価は出欠およびレポートで行なう。
    • 7回の授業のうち、5回以上の出席とレポートを提出すれば 評価の対象とする。
    • 上記の条件に満たない場合は、未履修とする
    • すべてのレポートの提出期限は 2015年7月30日とする
  • 講義資料は授業中のみ閲覧可能で、再配布はしない。ただし、授業の参考になる資料等については適宜本サイトに掲載する
  • レポートは指定されたメールアドレスに指定された様式で提出するものとする (課題のセクションを参照)
  • その他質問があれば、taku--at--google.com まで連絡のこと (--at--を @ に書き換えたものが実際のメールアドレス)

レポート課題の諸注意

  • 課題内容は講義中及び、本サイトにて公開する
  • 課題は kudo.utokyo.is.course --at-- gmail.com に提出のこと  (--at--を @ に書き換えたものが実際のメールアドレス)
  • レポートは 原則通常のテキスト形式 もしくは PDF とする。(PDFの場合はメール添付) 。それ以外のフォーマット (例えばパワーポイント・ワード等)は認めない
  • レポートは日本語もしくは英語で記述すること
  • レポートの長さには制限は無いが、課題一つに対し、A4 1--2枚程度が望ましい
  • メールのタイトルには  [講義番号:学籍番号] というキーワードを入れること
    • 例:  3つめの大規模分散システムへの課題、学籍番号が1234 の場合は [3:1234]
  • メール本文には、氏名、学籍番号、学年(M1, D2など)を明記すること
  • その他質問があれば、taku--at--google.com まで連絡のこと (--at--を @ に書き換えたものが実際のメールアドレス)

講義参考資料

  • 2015/06/04: (鵜飼担当) 大規模分散処理システム
    • 課題1か課題2のいずれかを選択
    • 課題1
      • 1. Implement simple MapReduce framework/library in your favorite programming language.
        • - Input: text files. pass each line to Map function.
        • - Output: text files. each line will be "<key> <value>\n".
          • -- assume no space in key, no '\n' in value.
        • - MapReduce app spawns N Mapper processes and M Reducer processes.
          • -- All input/output files are on local disk.
          • -- MapReduce app acts as MapReduce master
          • -- Each Mapper process reads n input files (no overlap), runs Map function and outputs temporary files for Reducers.
          • -- Each Reducer process reads temporary files, runs Reduce function, and writes 1 output file (no key overlap) 
      • 2. Implement MapReduce application "Inverted index" with your MapReduce framework.
        •   Hint: Map:
          •  input: filename, line => output: word (in the line), filename 
          •  word: space sparated or [a-zA-Z0-9_]+
          •  Reduce: input: word, iterator of filenames => output: word, list of filenames:count
      • 3. (Optional) Extend your MapReduce framework to run Mapper/Reducer on remote machines for files on remote machines.
        • make fault tolerant as much as possible.
        • (remote machine may crash, network error, etc)

    • 課題2
      • Read LevelDB source code LevelDB is an open-source implementation of key-value store developed by Google. Its architecture is similar with Bigtable tablet.
      • Explain how leveldb::DB::Open() constructs important internal data structures from files, and how leveldb::DB::Put() and Get() operates on those internal data structures and/or files.

  • 2015/06/18 (賀沢担当)
    • 課題1か課題2のいずれかを選択 (できるだけ課題1 を推奨)
    • 課題1
      • 現状のインターネットあるいはインターネットサービス(googleに限らない)の問題点を1つあげ、以下について論述せよ
        • 1. どのような解決方法がありうるか
        • 2. 解決方法を試した効果をどのように測定するか
      • 問題の大きさや方法の新規性は問いません。論理的に思考しているかを見ます。

    • 課題2
      • あなたはコンビニの店員です。店長にできるだけたくさんの牛乳を売ることを命じられました。牛乳を売る方法を20以上列挙してください。各方法はできるだけ重複のないような形にしてください。(例えば、AKB48とタイアップする、ももいろクローバーZとタイアップするという2つの方法は1つとみなされます)

  • 2015/06/25 (石塚担当)
    • 課題
      • 提示するペルソナを元にシナリオを書き、スマホ用1人暮らし専用レシピアプリをデザインしなさい。
      • ペルソナ

    • 提出物
    • 提出物期限
      • 7月30日日

    • シナリオを書くコツ
      • 今後インターフェイスを設計するためのシナリオなので、 どんなタスクが必要なのか明確にした方が良い。

    • 全体のヒント
      • お店で食材を見ながら、今夜簡単に作れるレシピが知りたい
      • 1人分の料理を作ると材料がいつも余ってしまうのが悩み
      • 購入しなければならない食材と、既に持っているものがある

  • 2015/07/02 (後藤担当)
    • 課題1 課題2のいずれかを選択
    • 課題1:
      • ユーザがどこにいるか位置情報を検出することが重要になってきている(例: GPS)。現在使用されている位置情報を検出する手法について3つ以上サーベイし、その特徴を書き出せ。また、各手法の利点欠点を比較せよ。
      • 上記位置情報を検出する手法について1つ抜き出し室内及び室外において、誤差を減らし精度を向上する方法について提案せよ。
      • その手法が特に有用となる活用事例について考えよ(例: GPS で地図を表示する)。現在存在するもの・まだ存在しないものでも良い。
    • 課題2:
      • インターネット上の API (例: Google Maps API) を用いて100か所以上の有益な実在する情報を地図上に表現し、その結果のソースコードおよび画面結果を提出せよ(可能ならば Web 上に利用可能な状態にする)。既存のサイトを参考にしても良いが、コピーしてはならない。
      • 地理情報をインターネット上で利用可能にするAPIを新たに設計し、実装せよ。

  • 2015/07/09 (吉野担当)
    • 課題1 課題2のいずれかを選択
    • 課題1:
      • Fetch API を用いて以下のコンポーネントから構成されるチャットサービスを実装せよ
        • サーバソフトウェア
        • Web ブラウザで動く JavaScript で書かれたクライアント
      • 機能
        • 各ユーザのオンライン状態の表示
        • テキストメッセージの交換
        • ファイルの送受信
      • 注意点
        • サーバは第三者が公開しているライブラリを用いて良い
        • ブラウザ上で動くスクリプトは全て自分で実装すること (JQuery なども使用しないこと)
        • サーバからのメッセージ通知には Streams API もしくは long polling を用いよ (Streams API は Chrome 43 から利用できる)
      • 提出物
        • 製作したサーバとクライアントのプログラム
          • 使用したライブラリやソフトウェアのうち、自作でないものは名前とバージョンのみレポートに記載すればよい
          • 例: Apache 2.4.9 を使用した
        • プログラムの使用方法の説明
        • プログラムの各所で採用したアルゴリズム・方法などの説明
      • 参考資料
    • 課題2:
  • 2015/07/16 (栗原担当)
    • 課題1課題2のいずれかを選択

    • 課題1
      • Implement “backpropagation” and train the neural network



      • Data
      • Neural Network
        • Input layer: 4 input nodes
        • Hidden layer: K nodes
        • Output layer: 3 nodes, each of which corresponds to one label.
        • Implement “regularization” in “backpropagation”
      • Report the code
      • Report the classification error with varying K
      • Analyze and report how K affected the classification error.

    • 課題1.5 (オプショナル。課題1が解けて余裕がある方)
      • Implement Restricted Bolzmann machine (RBM)
      • Train RBM using the iris data
      • Report the code and the classification error

    • 課題2
      • Survey:
        • What is overfitting?
        • Find at least 3 methods to avoid overfitting
        • Compare the methods
        • What is better than what and why?