blob: 2b9e24bbcd10a11b0ef5d0372933fa38974ab429 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>イントロダクション &mdash; incubator-singa 0.3.0 documentation</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="top" title="incubator-singa 0.3.0 documentation" href="../index.html"/>
<script src="../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../index.html" class="icon icon-home"> incubator-singa
<img src="../_static/singa.png" class="logo" />
</a>
<div class="version">
0.3.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="index.html">ドキュメント</a></li>
</ul>
<p class="caption"><span class="caption-text">Development</span></p>
<ul class="simple">
</ul>
<p class="caption"><span class="caption-text">Community</span></p>
<ul class="simple">
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">incubator-singa</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li>イントロダクション</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="">
<span id="id1"></span><h1>イントロダクション<a class="headerlink" href="#" title="Permalink to this headline"></a></h1>
<hr class="docutils" />
<p>SINGAは、大規模なデータ分析の為のディープラーニングモデルのトレーニングを目的とした「分散ディープラーニング・プラットフォーム」です。
モデルとなるネットワークの「レイヤー」概念に基づき、直感的にプログラミングできるようデザインされています。</p>
<ul class="simple">
<li>Convolutional Neural Network (畳み込みニューラルネットワーク) のようなフィードフォワードネットワークや、Restricted Boltzmann Machine (制限ボルツマンマシン) のようなエネルギーモデル、Recurrent Neural Network (再帰型ニューラルネットワーク) モデル等、多様なモデルをサポートします。</li>
<li>様々な「レイヤー」が、Built-in Layer として実装されています。</li>
<li>SINGAのアーキテクチャーは、synchronous (同期)、asynchronous (非同期)、そして hybrid (ハイブリッド) トレーニングを実行できるよう設計されています。</li>
<li>大規模なモデルのトレーニングを並列化するための、ニューラルネットワーク分割スキーム (バッチや特徴の分割) をサポートしています。</li>
</ul>
<div class="section" id="">
<span id="id2"></span><h2>目的<a class="headerlink" href="#" title="Permalink to this headline"></a></h2>
<p>拡張性:分散システムとして、より多くのリソースを利用し、特定の精度に達するまでのトレーニングスピードを向上させる。</p>
<p>使いやすさ:大規模な分散モデルの効率的なトレーニングに必要となる、データやモデルの分割、ネットワーク通信等、プログラマーにとって時間のかかる作業を簡略化し、ディープで複雑なモデルやアルゴリズムの実装を容易にする。</p>
</div>
<div class="section" id="">
<span id="id3"></span><h2>設計理念<a class="headerlink" href="#" title="Permalink to this headline"></a></h2>
<p>スケーラビリティは、分散ディープラーニングにおいて重要な研究課題です。
SINGAは、様々なトレーニングフレームワークのスケーラビリティーを保てるようよう設計されています。</p>
<ul class="simple">
<li>Synchronous (同期):トレーニングの1ステップで得られる効果を高めます。</li>
<li>Asynchronous (非同期):トレーニングの収束率を高めます。</li>
<li>Hybrid (ハイブリッド):コストやリソース(クラスターサイズ等)に合った効果と収束率のバランスをとり、スケーラビリティーを高めます。</li>
</ul>
<p>SINGAは、ディープラーニングモデルのネットワークの「レイヤー」概念に基づき、直感的にプログラミング出来るようデザインされています。様々なモデルを実装しトレーニングできます。</p>
</div>
<div class="section" id="">
<span id="id4"></span><h2>システム概要<a class="headerlink" href="#" title="Permalink to this headline"></a></h2>
<p><img src="../_static/images/sgd.png" align="center" width="400px"/>
<span><strong>Figure 1 - SGD フロー</strong></span></p>
<p>「ディープラーニングモデルをトレーニングする」とは、
特定のタスク(分類、予測等)を達成するために使われる特徴量を生成する変換関数の最適なパラメターを探すことです。
パラメターの良し悪しは、<a class="reference external" href="https://en.wikipedia.org/wiki/Cross_entropy">Cross-Entropy Loss</a> 等の loss function (損失関数)で判断します。この関数は一般的に非線形、または非凸関数なので、閉解を探すのが難しいです。</p>
<p>そこで、Stochastic Gradient Descent (確率的勾配降下法) を利用します。
Figure 1 のように、ランダムに初期化されたパラメーターの値を、損失関数が小さくなるよう繰り返しアップデートしていきます。</p>
<p><img src="../_static/images/overview.png" align="center" width="400px"/>
<span><strong>Figure 2 - SINGA 概要</strong></span></p>
<p>トレーニングに要するワークロードは、workers と servers に分散されます。Figure 2 のように、ループ毎に workers は <em>TrainOneBatch</em> 関数を呼び、パラメーター勾配を計算します。
<em>TrainOneBatch</em> は、ニューラルネットワークの構造が記述された <em>NeuralNet</em> オブジェクトに基づいて、「レイヤー」を順に見て回ります。
計算された勾配はローカルノードの stub に送られ、集計された後、対応する servers に送られます。Servers は、アップデートされたパラメーターを workers に送り返し、次のループを実行します。</p>
</div>
<div class="section" id="">
<span id="id5"></span><h2>ジョブ<a class="headerlink" href="#" title="Permalink to this headline"></a></h2>
<p>SINGA の「ジョブ」とは、ニューラルネットワークモデルとデータ、トレーニング方法やクラスタートポロジー等が記述された、「Job Configuration」を指します。
Job Configurationは、Figure 2に描かれた次の4つのコンポネントを特定します。</p>
<ul class="simple">
<li><a class="reference external" href="neural-net.html">NeuralNet</a>:ニューラルネットワークの構造と、各「レイヤー」の設定を記述します。</li>
<li><a class="reference external" href="train-one-batch.html">TrainOneBatch</a>:異なるモデルカテゴリに適したアルゴリズムを記述します。</li>
<li><a class="reference external" href="updater.html">Updater</a>: パラメーターのアップデート方法を記述します。</li>
<li><a class="reference external" href="distributed-training.html">Cluster Topology</a>:workers と servers の分散トポロジーを記述します。</li>
</ul>
<p><a class="reference external" href="programming-guide.html">main 関数</a>の SINGA ドライバにジョブを渡します。</p>
<p>このプロセスは、Hadoopでのジョブサブミッションに似ています。
ユーザーが main関数内でジョブの設定をします。
Hadoopユーザーは、自身の mapper や reducer を設定しますが、SINGAユーザーは、自身の「レイヤー」やUpdater等を設定します。</p>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2016 The Apache Software Foundation. All rights reserved. Apache Singa, Apache, the Apache feather logo, and the Apache Singa project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners..
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'0.3.0',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
<div class="rst-versions shift-up" data-toggle="rst-versions" role="note" aria-label="versions">
<img src="../_static/apache.jpg">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> incubator-singa </span>
v: 0.3.0
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../en/index.html">English</a></dd>
<dd><a href="../../zh/index.html">中文</a></dd>
<dd><a href="../../jp/index.html">日本語</a></dd>
<dd><a href="../../kr/index.html">한국어</a></dd>
</dl>
</div>
</div>
<a href="https://github.com/apache/incubator-singa">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"
alt="Fork me on GitHub">
</a>
</body>
</html>