<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=165.194.35.21</id>
	<title>ZeroWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=165.194.35.21"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php/Special:Contributions/165.194.35.21"/>
	<updated>2026-05-14T08:49:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34131</id>
		<title>LaLaLand/0706</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34131"/>
		<updated>2017-07-06T03:35:06Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 스터디 설명 =&lt;br /&gt;
7월 6일 스터디는&lt;br /&gt;
* 1단원 내용을 위키에 정리하기&lt;br /&gt;
** 1-1 ~ 1-4 : [[박인서]]&lt;br /&gt;
** 1-5 ~ 1-7 : [[전현욱]]&lt;br /&gt;
** 1-8 ~ 1-10 : [[안재형]]&lt;br /&gt;
** ~~??? : [[정진욱]]~~&lt;br /&gt;
&lt;br /&gt;
= 스터디 내용 =&lt;br /&gt;
* 단원명&lt;br /&gt;
** 단원 내용&lt;br /&gt;
식으로 작성해주시기 바랍니다.&lt;br /&gt;
* 1.1 : Systems of Linear Equations&lt;br /&gt;
** linear equation : a1x1 + a2x2 + a3x3 + ... + anxn = b 꼴로 나타내지는 방정식&lt;br /&gt;
** linear equation을 푸는 법 : 그래프 이용(하지만 변수가 4개 이상일 경우 힘듬), 행렬 이용&lt;br /&gt;
** linear equation의 해 : 없음, 1개, 무한대(consist와 uniqueness에 대해서 알면 됨)&lt;br /&gt;
** 행렬 표현법&lt;br /&gt;
** coefficient matrix : 각 equation의 계수만 적어놓은 행렬&lt;br /&gt;
** augmented matrix : coefficient matrix에 상수항까지 적어놓은 행렬&lt;br /&gt;
** 행렬로 linear equation 풀기 : elementary row operations 이용&lt;br /&gt;
** Replacement : 한 row에 대해서 다른 row와 더하거나 빼는 것&lt;br /&gt;
** Interchange : 두개의 row를 변경&lt;br /&gt;
** Scaling : 한 row의 모든 entry에 특정 값을 곱함&lt;br /&gt;
* 1.2 : Row Reduction and Echelon Forms&lt;br /&gt;
** echelon form&lt;br /&gt;
** nonzero rows가 zero rows 위에 있어야 됨&lt;br /&gt;
** leading entry(pivot)이 왼쪽에 있는 것이 위로 가야됨&lt;br /&gt;
** leading entry 아래에 있는 column의 값은 0이여야 됨&lt;br /&gt;
** reduced echelon form&lt;br /&gt;
** 기존의 row echelon form의 조건은 모두 만족&lt;br /&gt;
** leading entry가 1이여야 됨&lt;br /&gt;
** leading entry가 있는 column의 나머지 entry는 모두 0이여야 됨&lt;br /&gt;
** pivot position : echelon form을 만들 때 기준이 되는 position&lt;br /&gt;
** row reduction algorithm : elementary row operations를 이용&lt;br /&gt;
** solution of linear system&lt;br /&gt;
** basic variable : pivot position이 있는 variable&lt;br /&gt;
** free variable : pivot position이 없는 variable&lt;br /&gt;
* 1.3 : Vector Equations&lt;br /&gt;
** vector : matrix의 각각의 column을 vector라고 볼 수 있음.&lt;br /&gt;
** vector는 교환법칙, 결합법칙, 분배법칙이 성립한다.&lt;br /&gt;
** linear combination : 각 vector의 스칼라 곱의 합(a1v1 + a2v2 + ... + anvn)&lt;br /&gt;
** span : span{u, v} = 벡터 u, v를 linear combination 해서 만들 수 있는 벡터들의 집합&lt;br /&gt;
* 1.4 : The Matrix Equation Ax=b&lt;br /&gt;
** matrix equation Ax=b&lt;br /&gt;
** Ax = b &amp;lt;=&amp;gt; x1a1 + x2a2 + ... + xnan = b &amp;lt;=&amp;gt; [[a1 a2 ... an b]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 1.5 : Solution Set of Linear Systems&lt;br /&gt;
 *Homogeneous Linear Systems&lt;br /&gt;
   *Ax=0 라는 Homogeneous 방정식이 있을 때, 방정식이 최소한 하나의 free variable이 있어야만 x가 zero vector가 아닌 해를 가진다. &lt;br /&gt;
    즉 nontrivial solution을 가진다.&lt;br /&gt;
 *Parametric Vector Form&lt;br /&gt;
  *parametric vector equation은 x = su + tv(s,t in R)로 표현할 수 있다. 예를 들어서 x = tv(t in R)이라는 방정식은 직선의 방정식을 &lt;br /&gt;
   표현한 것이 된다. 만일 solution set이 x = s(3,1,2) + t(2,0,1)의 벡터형태로 표현된다면 그 solution을 parametric vector form이라&lt;br /&gt;
   고 한다.&lt;br /&gt;
* Ax=b와 Ax=0의 solution set관계&lt;br /&gt;
** Ax=b가 consistent하고, p를 solution이라고 가정한다. 그러면 Ax=b의 solution set은 v = p + h의 형태로 표현할 수 있다. 여기서 h&lt;br /&gt;
    는 Ax=0의 solution이다. 다만 Ax=b는 nonzero solution인 p가 최소한 하나 이상있어야 한다. 만일 Ax=b가 해가 없다면 solution set&lt;br /&gt;
    은 존재하지 않게된다.&lt;br /&gt;
&lt;br /&gt;
*1.6 : Applications Of Linear Systems&lt;br /&gt;
 *이 단원은 많은 솔루션을 갖춘 linear system이 우리들의 일상생활에서 어떻 형태로 나타나는지 가르쳐준다. 경제학, 화학반응식, 네트&lt;br /&gt;
  워크의 흐름등이 이 책에서 예시로 나왔다. 내용의 특성상 간단하게 경제학으로 예시를 들겠다.&lt;br /&gt;
 *국가의 경제를 구성하는 요소 중에는 물품생산, 통신, 오락, 서비스 등이 있다. 우리가 각 영역의 1년 동안의 총 output을 알고, 그 &lt;br /&gt;
  output들이 다른 분야로 배분되고, 다른 분야와 교환되는 양을 한다고 가정한다. 그렇다면 우리는 각 영역의 소득이 정확한 균형을 이루&lt;br /&gt;
  도록 할 수 있는 평형가격을 구할 수 있다. &lt;br /&gt;
&lt;br /&gt;
 *문제를 꼭 풀어보길 바랍니다. (제발)&lt;br /&gt;
  *추천하는 문제는 David C.Lay - Linear Algebra and its applications에서 1.6장 exercise 문제 4번이다.&lt;br /&gt;
   정답은 저에게 문의하시길.&lt;br /&gt;
&lt;br /&gt;
*1.7 : Linear Independence&lt;br /&gt;
 *Independent&lt;br /&gt;
  *{v1,v2,......vp}라는 벡터들의 집합이 Rn에 있다고 가정했을 때, x1v1 + x2v2 + ...... + xpvp = 0이라는 vector equation에서 x=0이&lt;br /&gt;
   라는 trivial solution만 존재한다면 이것을 linearly independent하다고 표현한다.&lt;br /&gt;
 *Dependent &lt;br /&gt;
  *{v1,v2,......vp}라는 벡터들의 집합이 Rn에 있다고 가정했을 때, c1v1 + c2v2 + ...... + cpvp = 0에서 c1...cp중에서 하나라도 0이 &lt;br /&gt;
   아닌 것이 존재한다면 이것을 linearl dependent라고 표현한다.&lt;br /&gt;
 *Linear Independence of Matrix Columns&lt;br /&gt;
  *Matrix A = {a1...an}(여기서 a1...an은 각각 A의 column vector이다)라고 해보자. 그러면 Ax=0를 x1a1 + x2a2 +....+ xnan으로 표현할 &lt;br /&gt;
   수 있는데, 여기서 x1...xn이 모두 0인 경우에 A가 linearly independent가 된다.  &lt;br /&gt;
 *Sets of One or Two Vectors&lt;br /&gt;
  *벡터v가 1개 있을 때, v가 0이 아니라면 linearly independent하다. 벡터 2개 {v1,v2}가 있을 때 한 벡터가 다른 벡터의 스칼라배(예를 &lt;br /&gt;
   들어서 v1=2v2)라면 dependent하고, 그렇지 않다면 independent하다. &lt;br /&gt;
 *Sets of Two or More Vectors&lt;br /&gt;
  *S={v1....vp}라는 벡터집합에서 적어도 하나의 벡터를 다른 벡터들의 combination으로 만들 수 있다면, dependent라고 한다.&lt;br /&gt;
&lt;br /&gt;
 *보충내용&lt;br /&gt;
  *만약에 각 vector의 원소개수보다 column vector의 수가 더 많다면, 무조건 linearly dependent하다.&lt;br /&gt;
  *왜냐하면 이 경우에는 방정식보다 미지수의 수가 더 많게 되고, 무조건 free variable이 생기기 때문이다. free variable이 생기면 &lt;br /&gt;
   nontrivial한 solution set이 생기고 이것은 dependent하다는 것을 의미하게 된다.&lt;br /&gt;
  *만약에 S={v1....vp}라는 집합에서 zero vector가 존재한다면 linearly dependent하다.&lt;br /&gt;
= 다음 차시 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34130</id>
		<title>LaLaLand/0706</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34130"/>
		<updated>2017-07-06T03:34:09Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 스터디 설명 =&lt;br /&gt;
7월 6일 스터디는&lt;br /&gt;
* 1단원 내용을 위키에 정리하기&lt;br /&gt;
** 1-1 ~ 1-4 : [[박인서]]&lt;br /&gt;
** 1-5 ~ 1-7 : [[전현욱]]&lt;br /&gt;
** 1-8 ~ 1-10 : [[안재형]]&lt;br /&gt;
** ~~??? : [[정진욱]]~~&lt;br /&gt;
&lt;br /&gt;
= 스터디 내용 =&lt;br /&gt;
* 단원명&lt;br /&gt;
** 단원 내용&lt;br /&gt;
식으로 작성해주시기 바랍니다.&lt;br /&gt;
* 1.1 : Systems of Linear Equations&lt;br /&gt;
** linear equation : a1x1 + a2x2 + a3x3 + ... + anxn = b 꼴로 나타내지는 방정식&lt;br /&gt;
** linear equation을 푸는 법 : 그래프 이용(하지만 변수가 4개 이상일 경우 힘듬), 행렬 이용&lt;br /&gt;
** linear equation의 해 : 없음, 1개, 무한대(consist와 uniqueness에 대해서 알면 됨)&lt;br /&gt;
** 행렬 표현법&lt;br /&gt;
** coefficient matrix : 각 equation의 계수만 적어놓은 행렬&lt;br /&gt;
** augmented matrix : coefficient matrix에 상수항까지 적어놓은 행렬&lt;br /&gt;
** 행렬로 linear equation 풀기 : elementary row operations 이용&lt;br /&gt;
** Replacement : 한 row에 대해서 다른 row와 더하거나 빼는 것&lt;br /&gt;
** Interchange : 두개의 row를 변경&lt;br /&gt;
** Scaling : 한 row의 모든 entry에 특정 값을 곱함&lt;br /&gt;
* 1.2 : Row Reduction and Echelon Forms&lt;br /&gt;
** echelon form&lt;br /&gt;
** nonzero rows가 zero rows 위에 있어야 됨&lt;br /&gt;
** leading entry(pivot)이 왼쪽에 있는 것이 위로 가야됨&lt;br /&gt;
** leading entry 아래에 있는 column의 값은 0이여야 됨&lt;br /&gt;
** reduced echelon form&lt;br /&gt;
** 기존의 row echelon form의 조건은 모두 만족&lt;br /&gt;
** leading entry가 1이여야 됨&lt;br /&gt;
** leading entry가 있는 column의 나머지 entry는 모두 0이여야 됨&lt;br /&gt;
** pivot position : echelon form을 만들 때 기준이 되는 position&lt;br /&gt;
** row reduction algorithm : elementary row operations를 이용&lt;br /&gt;
** solution of linear system&lt;br /&gt;
** basic variable : pivot position이 있는 variable&lt;br /&gt;
** free variable : pivot position이 없는 variable&lt;br /&gt;
* 1.3 : Vector Equations&lt;br /&gt;
** vector : matrix의 각각의 column을 vector라고 볼 수 있음.&lt;br /&gt;
** vector는 교환법칙, 결합법칙, 분배법칙이 성립한다.&lt;br /&gt;
** linear combination : 각 vector의 스칼라 곱의 합(a1v1 + a2v2 + ... + anvn)&lt;br /&gt;
** span : span{u, v} = 벡터 u, v를 linear combination 해서 만들 수 있는 벡터들의 집합&lt;br /&gt;
* 1.4 : The Matrix Equation Ax=b&lt;br /&gt;
** matrix equation Ax=b&lt;br /&gt;
** Ax = b &amp;lt;=&amp;gt; x1a1 + x2a2 + ... + xnan = b &amp;lt;=&amp;gt; [[a1 a2 ... an b]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 1.5 : Solution Set of Linear Systems&lt;br /&gt;
 *Homogeneous Linear Systems&lt;br /&gt;
   *Ax=0 라는 Homogeneous 방정식이 있을 때, 방정식이 최소한 하나의 free variable이 있어야만 x가 zero vector가 아닌 해를 가진다. &lt;br /&gt;
    즉 nontrivial solution을 가진다.&lt;br /&gt;
 *Parametric Vector Form&lt;br /&gt;
  *parametric vector equation은 x = su + tv(s,t in R)로 표현할 수 있다. 예를 들어서 x = tv(t in R)이라는 방정식은 직선의 방정식을 &lt;br /&gt;
   표현한 것이 된다. 만일 solution set이 x = s(3,1,2) + t(2,0,1)의 벡터형태로 표현된다면 그 solution을 parametric vector form이라&lt;br /&gt;
   고 한다.&lt;br /&gt;
* Ax=b와 Ax=0의 solution set관계&lt;br /&gt;
** Ax=b가 consistent하고, p를 solution이라고 가정한다. 그러면 Ax=b의 solution set은 v = p + h의 형태로 표현할 수 있다. 여기서 h&lt;br /&gt;
    는 Ax=0의 solution이다. 다만 Ax=b는 nonzero solution인 p가 최소한 하나 이상있어야 한다. 만일 Ax=b가 해가 없다면 solution set&lt;br /&gt;
    은 존재하지 않게된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*1.6 : Applications Of Linear Systems&lt;br /&gt;
&lt;br /&gt;
 *이 단원은 많은 솔루션을 갖춘 linear system이 우리들의 일상생활에서 어떻 형태로 나타나는지 가르쳐준다. 경제학, 화학반응식, 네트&lt;br /&gt;
  워크의 흐름등이 이 책에서 예시로 나왔다. 내용의 특성상 간단하게 경제학으로 예시를 들겠다.&lt;br /&gt;
 *국가의 경제를 구성하는 요소 중에는 물품생산, 통신, 오락, 서비스 등이 있다. 우리가 각 영역의 1년 동안의 총 output을 알고, 그 &lt;br /&gt;
  output들이 다른 분야로 배분되고, 다른 분야와 교환되는 양을 한다고 가정한다. 그렇다면 우리는 각 영역의 소득이 정확한 균형을 이루&lt;br /&gt;
  도록 할 수 있는 평형가격을 구할 수 있다. &lt;br /&gt;
&lt;br /&gt;
 *문제를 꼭 풀어보길 바랍니다. (제발)&lt;br /&gt;
  *추천하는 문제는 David C.Lay - Linear Algebra and its applications에서 1.6장 exercise 문제 4번이다.&lt;br /&gt;
   정답은 저에게 문의하시길.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*1.7 : Linear Independence&lt;br /&gt;
&lt;br /&gt;
 *Independent&lt;br /&gt;
  *{v1,v2,......vp}라는 벡터들의 집합이 Rn에 있다고 가정했을 때, x1v1 + x2v2 + ...... + xpvp = 0이라는 vector equation에서 x=0이&lt;br /&gt;
   라는 trivial solution만 존재한다면 이것을 linearly independent하다고 표현한다.&lt;br /&gt;
 *Dependent &lt;br /&gt;
  *{v1,v2,......vp}라는 벡터들의 집합이 Rn에 있다고 가정했을 때, c1v1 + c2v2 + ...... + cpvp = 0에서 c1...cp중에서 하나라도 0이 &lt;br /&gt;
   아닌 것이 존재한다면 이것을 linearl dependent라고 표현한다.&lt;br /&gt;
&lt;br /&gt;
 *Linear Independence of Matrix Columns&lt;br /&gt;
  *Matrix A = {a1...an}(여기서 a1...an은 각각 A의 column vector이다)라고 해보자. 그러면 Ax=0를 x1a1 + x2a2 +....+ xnan으로 표현할 &lt;br /&gt;
   수 있는데, 여기서 x1...xn이 모두 0인 경우에 A가 linearly independent가 된다.  &lt;br /&gt;
&lt;br /&gt;
 *Sets of One or Two Vectors&lt;br /&gt;
  *벡터v가 1개 있을 때, v가 0이 아니라면 linearly independent하다. 벡터 2개 {v1,v2}가 있을 때 한 벡터가 다른 벡터의 스칼라배(예를 &lt;br /&gt;
   들어서 v1=2v2)라면 dependent하고, 그렇지 않다면 independent하다. &lt;br /&gt;
&lt;br /&gt;
 *Sets of Two or More Vectors&lt;br /&gt;
  *S={v1....vp}라는 벡터집합에서 적어도 하나의 벡터를 다른 벡터들의 combination으로 만들 수 있다면, dependent라고 한다.&lt;br /&gt;
&lt;br /&gt;
 *보충내용&lt;br /&gt;
  *만약에 각 vector의 원소개수보다 column vector의 수가 더 많다면, 무조건 linearly dependent하다.&lt;br /&gt;
  *왜냐하면 이 경우에는 방정식보다 미지수의 수가 더 많게 되고, 무조건 free variable이 생기기 때문이다. free variable이 생기면 &lt;br /&gt;
   nontrivial한 solution set이 생기고 이것은 dependent하다는 것을 의미하게 된다.&lt;br /&gt;
  *만약에 S={v1....vp}라는 집합에서 zero vector가 존재한다면 linearly dependent하다.&lt;br /&gt;
= 다음 차시 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34129</id>
		<title>LaLaLand/0706</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LaLaLand/0706&amp;diff=34129"/>
		<updated>2017-07-06T03:26:59Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 스터디 설명 =&lt;br /&gt;
7월 6일 스터디는&lt;br /&gt;
* 1단원 내용을 위키에 정리하기&lt;br /&gt;
** 1-1 ~ 1-4 : [[박인서]]&lt;br /&gt;
** 1-5 ~ 1-7 : [[전현욱]]&lt;br /&gt;
** 1-8 ~ 1-10 : [[안재형]]&lt;br /&gt;
** ~~??? : [[정진욱]]~~&lt;br /&gt;
&lt;br /&gt;
= 스터디 내용 =&lt;br /&gt;
* 단원명&lt;br /&gt;
** 단원 내용&lt;br /&gt;
식으로 작성해주시기 바랍니다.&lt;br /&gt;
* 1.1 : Systems of Linear Equations&lt;br /&gt;
** linear equation : a1x1 + a2x2 + a3x3 + ... + anxn = b 꼴로 나타내지는 방정식&lt;br /&gt;
** linear equation을 푸는 법 : 그래프 이용(하지만 변수가 4개 이상일 경우 힘듬), 행렬 이용&lt;br /&gt;
** linear equation의 해 : 없음, 1개, 무한대(consist와 uniqueness에 대해서 알면 됨)&lt;br /&gt;
** 행렬 표현법&lt;br /&gt;
** coefficient matrix : 각 equation의 계수만 적어놓은 행렬&lt;br /&gt;
** augmented matrix : coefficient matrix에 상수항까지 적어놓은 행렬&lt;br /&gt;
** 행렬로 linear equation 풀기 : elementary row operations 이용&lt;br /&gt;
** Replacement : 한 row에 대해서 다른 row와 더하거나 빼는 것&lt;br /&gt;
** Interchange : 두개의 row를 변경&lt;br /&gt;
** Scaling : 한 row의 모든 entry에 특정 값을 곱함&lt;br /&gt;
* 1.2 : Row Reduction and Echelon Forms&lt;br /&gt;
** echelon form&lt;br /&gt;
** nonzero rows가 zero rows 위에 있어야 됨&lt;br /&gt;
** leading entry(pivot)이 왼쪽에 있는 것이 위로 가야됨&lt;br /&gt;
** leading entry 아래에 있는 column의 값은 0이여야 됨&lt;br /&gt;
** reduced echelon form&lt;br /&gt;
** 기존의 row echelon form의 조건은 모두 만족&lt;br /&gt;
** leading entry가 1이여야 됨&lt;br /&gt;
** leading entry가 있는 column의 나머지 entry는 모두 0이여야 됨&lt;br /&gt;
** pivot position : echelon form을 만들 때 기준이 되는 position&lt;br /&gt;
** row reduction algorithm : elementary row operations를 이용&lt;br /&gt;
** solution of linear system&lt;br /&gt;
** basic variable : pivot position이 있는 variable&lt;br /&gt;
** free variable : pivot position이 없는 variable&lt;br /&gt;
* 1.3 : Vector Equations&lt;br /&gt;
** vector : matrix의 각각의 column을 vector라고 볼 수 있음.&lt;br /&gt;
** vector는 교환법칙, 결합법칙, 분배법칙이 성립한다.&lt;br /&gt;
** linear combination : 각 vector의 스칼라 곱의 합(a1v1 + a2v2 + ... + anvn)&lt;br /&gt;
** span : span{u, v} = 벡터 u, v를 linear combination 해서 만들 수 있는 벡터들의 집합&lt;br /&gt;
* 1.4 : The Matrix Equation Ax=b&lt;br /&gt;
** matrix equation Ax=b&lt;br /&gt;
** Ax = b &amp;lt;=&amp;gt; x1a1 + x2a2 + ... + xnan = b &amp;lt;=&amp;gt; [[a1 a2 ... an b]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 1.5 : Solution Set of Linear Systems&lt;br /&gt;
 *Homogeneous Linear Systems&lt;br /&gt;
   *Ax=0 라는 Homogeneous 방정식이 있을 때, 방정식이 최소한 하나의 free variable이 있어야만 x가 zero vector가 아닌 해를 가진다. &lt;br /&gt;
    즉 nontrivial solution을 가진다.&lt;br /&gt;
 *Parametric Vector Form&lt;br /&gt;
  *parametric vector equation은 x = su + tv(s,t in R)로 표현할 수 있다. 예를 들어서 x = tv(t in R)이라는 방정식은 직선의 방정식을 &lt;br /&gt;
   표현한 것이 된다. 만일 solution set이 x = s(3,1,2) + t(2,0,1)의 벡터형태로 표현된다면 그 solution을 parametric vector form이라&lt;br /&gt;
   고 한다.&lt;br /&gt;
* Ax=b와 Ax=0의 solution set관계&lt;br /&gt;
** Ax=b가 consistent하고, p를 solution이라고 가정한다. 그러면 Ax=b의 solution set은 v = p + h의 형태로 표현할 수 있다. 여기서 h&lt;br /&gt;
    는 Ax=0의 solution이다. 다만 Ax=b는 nonzero solution인 p가 최소한 하나 이상있어야 한다. 만일 Ax=b가 해가 없다면 solution set&lt;br /&gt;
    은 존재하지 않게된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 다음 차시 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LaLaLand/0627&amp;diff=34126</id>
		<title>LaLaLand/0627</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LaLaLand/0627&amp;diff=34126"/>
		<updated>2017-07-06T02:14:52Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 스터디 설명 =&lt;br /&gt;
* 스터디 책 변경&lt;br /&gt;
** 기존의 책에서 David. C. Lay - Linear Algebra and Its Applications 책으로 변경&lt;br /&gt;
* 목차&lt;br /&gt;
** 제1장 선형대수학에서의 선형방정식 &lt;br /&gt;
** 제2장 행렬 대수 &lt;br /&gt;
** 제3장 행렬식 &lt;br /&gt;
** 제4장 벡터 공간 &lt;br /&gt;
** 제5장 고윳값과 고유 벡터 &lt;br /&gt;
** 제6장 직교성과 최소제곱법 &lt;br /&gt;
** 제7장 대칭행렬과 이차형식 &lt;br /&gt;
** ~~제8장 벡터공간의 기하~~&lt;br /&gt;
&lt;br /&gt;
= 스터디 내용 =&lt;br /&gt;
== 스터디 진도 정하기 ==&lt;br /&gt;
* 안재형 : Orthogonality 이후&lt;br /&gt;
* 박인서 : Application 이후, 앞쪽 훑는거 상관없음&lt;br /&gt;
* 전현욱 : Orthogonality 이후&lt;br /&gt;
* 정진욱 : Orthogonality 이후&lt;br /&gt;
== 스터디 계획 ==&lt;br /&gt;
* 1차시 : 행렬 대수(기존의 고등학교 과정) + 1장 선형대수학에서의 선형방정식 개념, 문제풀이&lt;br /&gt;
* 2차시 : Determinant, Orthogonality 문제풀이&lt;br /&gt;
* 3차시 : Vector Space 문제풀이&lt;br /&gt;
* 4차시 : EigenValue, Eigenvector 문제풀이&lt;br /&gt;
* 5차시 : 7장 일부분 개념&lt;br /&gt;
&lt;br /&gt;
* 1~2차시정도는 유동적으로 움직일 수 있음&lt;br /&gt;
* 총 차시는 8차시로 예정&lt;br /&gt;
== 참고할만한 자료들 ==&lt;br /&gt;
* MIT OCW : https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/&lt;br /&gt;
* ~~EBS~~&lt;br /&gt;
* OCW-HYU: https://www.youtube.com/watch?v=esuviuoljUo&amp;amp;list=PLSN_PltQeOyjDGSghAf92VhdMBeaLZWR3&amp;amp;index=19&amp;amp;app=desktop&lt;br /&gt;
&lt;br /&gt;
= 다음 차시 =&lt;br /&gt;
* 학기중 과제 hw_01 풀어오기&lt;br /&gt;
* 책 1장 Exercise 부분 자율적으로 풀다가 막히는 문제 가져오기&lt;br /&gt;
* 다른 이유 없으면 7월 6일 1시에 모이는걸로&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LaLaLand/0627&amp;diff=34125</id>
		<title>LaLaLand/0627</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LaLaLand/0627&amp;diff=34125"/>
		<updated>2017-07-06T02:14:23Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 스터디 설명 =&lt;br /&gt;
* 스터디 책 변경&lt;br /&gt;
** 기존의 책에서 David. C. Lay - Linear Algebra and Its Applications 책으로 변경&lt;br /&gt;
* 목차&lt;br /&gt;
** 제1장 선형대수학에서의 선형방정식 &lt;br /&gt;
** 제2장 행렬 대수 &lt;br /&gt;
** 제3장 행렬식 &lt;br /&gt;
** 제4장 벡터 공간 &lt;br /&gt;
** 제5장 고윳값과 고유 벡터 &lt;br /&gt;
** 제6장 직교성과 최소제곱법 &lt;br /&gt;
** 제7장 대칭행렬과 이차형식 &lt;br /&gt;
** ~~제8장 벡터공간의 기하~~&lt;br /&gt;
&lt;br /&gt;
= 스터디 내용 =&lt;br /&gt;
== 스터디 진도 정하기 ==&lt;br /&gt;
* 안재형 : Orthogonality 이후&lt;br /&gt;
* 박인서 : Application 이후, 앞쪽 훑는거 상관없음&lt;br /&gt;
* 전현욱 : Orthogonality 이후&lt;br /&gt;
* 정진욱 : Orthogonality 이후&lt;br /&gt;
== 스터디 계획 ==&lt;br /&gt;
* 1차시 : 행렬 대수(기존의 고등학교 과정) + 1장 선형대수학에서의 선형방정식 개념, 문제풀이&lt;br /&gt;
* 2차시 : Determinant, Orthogonality 문제풀이&lt;br /&gt;
* 3차시 : Vector Space 문제풀이&lt;br /&gt;
* 4차시 : EigenValue, Eigenvector 문제풀이&lt;br /&gt;
* 5차시 : 7장 일부분 개념&lt;br /&gt;
&lt;br /&gt;
* 1~2차시정도는 유동적으로 움직일 수 있음&lt;br /&gt;
* 총 차시는 8차시로 예정&lt;br /&gt;
== 참고할만한 자료들 ==&lt;br /&gt;
* MIT OCW : https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/&lt;br /&gt;
* ~~EBS~~&lt;br /&gt;
* https://www.youtube.com/watch?v=esuviuoljUo&amp;amp;list=PLSN_PltQeOyjDGSghAf92VhdMBeaLZWR3&amp;amp;index=19&amp;amp;app=desktop&lt;br /&gt;
&lt;br /&gt;
= 다음 차시 =&lt;br /&gt;
* 학기중 과제 hw_01 풀어오기&lt;br /&gt;
* 책 1장 Exercise 부분 자율적으로 풀다가 막히는 문제 가져오기&lt;br /&gt;
* 다른 이유 없으면 7월 6일 1시에 모이는걸로&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49050</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49050"/>
		<updated>2017-07-01T13:22:30Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
&lt;br /&gt;
==== Keras 를 쓰기 좋은 경우 ====&lt;br /&gt;
* 이미 알려진 모델을 사용하는 경우&lt;br /&gt;
* 베이스 라인이 없는 경우&lt;br /&gt;
* 원하는 결과를 빠르게 만들어야 할 경우&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49049</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49049"/>
		<updated>2017-07-01T13:22:21Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
&lt;br /&gt;
==== Keras 를 쓰기 좋은 경우 ====&lt;br /&gt;
&lt;br /&gt;
* 이미 알려진 모델을 사용하는 경우&lt;br /&gt;
* 베이스 라인이 없는 경우&lt;br /&gt;
* 원하는 결과를 빠르게 만들어야 할 경우&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49048</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49048"/>
		<updated>2017-07-01T13:18:03Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49047</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49047"/>
		<updated>2017-07-01T13:05:25Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일미, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49046</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49046"/>
		<updated>2017-07-01T13:04:58Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49045</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49045"/>
		<updated>2017-07-01T12:45:36Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 전체 구성 ====&lt;br /&gt;
# 데이터 준비 : (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)&lt;br /&gt;
# Neural network 모델의 디자인 : model.add(......)&lt;br /&gt;
# 학습 프로세스 정의 : model.compile(optimizer, loss)&lt;br /&gt;
# 학습: model.fit(x_train, y_train)&lt;br /&gt;
# 평가: model.evaluate(x_test, y_test)&lt;br /&gt;
# 예측: model.predict(x)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49044</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49044"/>
		<updated>2017-07-01T12:41:25Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF는 그냥 사용하기에는 추상화 수준이 낮음&lt;br /&gt;
*** 직접적인 matrix 연산, 연산 = 노드 개념, 원하는 값을 얻기 위한 tensor eval 등&lt;br /&gt;
*** 현재는 더 높은 추상화 수준의 라이브러리들도 제공&lt;br /&gt;
* 쉽고 빠른 구현&lt;br /&gt;
*** TF와 다르게 개별 연산 수준에서 NN를 만드는 게 아니라 레이어 단위로 NN을 구성&lt;br /&gt;
*** NN 구성에 필요한 핵심 기능들 지원&lt;br /&gt;
*** Training, prediction 등을 메소드 형태를 통해 쉽게 사용할 수 있음&lt;br /&gt;
&lt;br /&gt;
* 문제 : 영화 리뷰 데이터셋을 이용한 감정 분석(sentiment analysis)&lt;br /&gt;
*** Keras에서 미리 단어를 빈도에 따라 indexing하였음&lt;br /&gt;
*** Input : 25,000 영화 리뷰 : imdb&lt;br /&gt;
*** Output : 긍정/부정 분류 결과(binary classification)&lt;br /&gt;
*** Model : 1-D CNN + max pool + fully connected&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49043</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49043"/>
		<updated>2017-07-01T12:35:07Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
    &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG 국내산, 상품&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용(?)&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
&lt;br /&gt;
# 입력 문자열의 자모 분해&lt;br /&gt;
&lt;br /&gt;
# Neural network model&lt;br /&gt;
&lt;br /&gt;
* 식자재 검색 : 썬단무지 3kg 원형썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무 국내산, NB 한아름 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 원형썰기&lt;br /&gt;
 썬단무지, 무, 국내산, 일하, 3KG PAC, 반달썰기&lt;br /&gt;
 썬단무지, 무우, 국내산, 싱그랑, 3KG PAC, 반달썰기&lt;br /&gt;
&lt;br /&gt;
=== Keras 실습 ===&lt;br /&gt;
* Theano/tensorflow를 이용한 상위 레벨의 deep learning library&lt;br /&gt;
* Theano/TF &lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49042</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49042"/>
		<updated>2017-07-01T12:23:59Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
* 언어를 특성이 다른 데이터(그림, 음성)와 같은 표현(vector)으로 나타냄으로 여러 데이터를 같이 사용한(multimodal model)의 구축이 쉬워짐&lt;br /&gt;
&lt;br /&gt;
==== ESTsoft의 사례 ====&lt;br /&gt;
* 문제 : 다양한 종류의 비정형적 주문 이력들로부터 올바른 상품명 찾기&lt;br /&gt;
   &amp;quot;생표고버섯 KG 국내산&amp;quot; -&amp;gt; 표고버섯, 국내산, KG&lt;br /&gt;
  =&amp;gt; 문자열 비교? 전통적인 방식&lt;br /&gt;
&lt;br /&gt;
 건표고버섯 KG 국내산, 상품&lt;br /&gt;
 느타리버섯 KG 국내산, 상품&lt;br /&gt;
 새송이버섯 KG 국내산, 상품&lt;br /&gt;
 양송이버섯 KG rnrsotks, tkdvna&lt;br /&gt;
 표고버섯(생) KG KG 국내산&lt;br /&gt;
 엄지새송이버섯 KG 국내산, D-2 KG&lt;br /&gt;
 느타리버섯 KG 찌개용 KG 국내산&lt;br /&gt;
전체 350,000 건&lt;br /&gt;
&lt;br /&gt;
* Deep learning 모델을 이용해 상품명을 찾음(= classification 문제)&lt;br /&gt;
*** CNN 모델 사용&lt;br /&gt;
*** RNN : 연속적 데이터들의 처리에 좋음, 불연속적인 심볼의 나열, 샘플(문장)별로 길이가 다를 수 있음&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49041</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49041"/>
		<updated>2017-07-01T12:16:42Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49040</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49040"/>
		<updated>2017-07-01T12:16:36Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49039</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49039"/>
		<updated>2017-07-01T12:15:57Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import math&lt;br /&gt;
 &lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 NUM_CLASSES = 10&lt;br /&gt;
 &lt;br /&gt;
 IMAGE_SIZE = 28&lt;br /&gt;
 IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
     with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([IMAGE_PIXELS, hidden1_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden1_units]),&lt;br /&gt;
                              name=&#039;biases&#039;)&lt;br /&gt;
         hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden1_units, hidden2_units],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([hidden2_units]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
 &lt;br /&gt;
     with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
         weights = tf.Variable(&lt;br /&gt;
             tf.truncated_normal([hidden2_units, NUM_CLASSES],&lt;br /&gt;
                                 stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
             name=&#039;weights&#039;)&lt;br /&gt;
         biases = tf.Variable(tf.zeros([NUM_CLASSES]),&lt;br /&gt;
                          name=&#039;biases&#039;)&lt;br /&gt;
         logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
     return logits&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def loss(logits, labels):&lt;br /&gt;
     labels = tf.to_int64(labels)&lt;br /&gt;
     cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
         labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
     return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def training(loss, learning_rate):&lt;br /&gt;
     tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
     optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
     global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
     train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
     return train_op&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def evaluation(logits, labels):&lt;br /&gt;
     correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
     return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49038</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49038"/>
		<updated>2017-07-01T12:15:43Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
 from __future__ import absolute_import&lt;br /&gt;
 from __future__ import division&lt;br /&gt;
 from __future__ import print_function&lt;br /&gt;
 &lt;br /&gt;
 import argparse&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 &lt;br /&gt;
 from six.moves import xrange&lt;br /&gt;
 import tensorflow as tf&lt;br /&gt;
 &lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
 from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
 &lt;br /&gt;
 FLAGS = None&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def placeholder_inputs(batch_size):&lt;br /&gt;
     images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                            mnist.IMAGE_PIXELS))&lt;br /&gt;
     labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
     return images_placeholder, labels_placeholder&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
     images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                    FLAGS.fake_data)&lt;br /&gt;
     feed_dict = {&lt;br /&gt;
         images_pl: images_feed,&lt;br /&gt;
         labels_pl: labels_feed,&lt;br /&gt;
     }&lt;br /&gt;
     return feed_dict&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def do_eval(sess,&lt;br /&gt;
             eval_correct,&lt;br /&gt;
             images_placeholder,&lt;br /&gt;
             labels_placeholder,&lt;br /&gt;
             data_set):&lt;br /&gt;
 &lt;br /&gt;
     true_count = 0&lt;br /&gt;
     steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
     num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
     for step in xrange(steps_per_epoch):&lt;br /&gt;
         feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                    images_placeholder,&lt;br /&gt;
                                    labels_placeholder)&lt;br /&gt;
         true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
     precision = float(true_count) / num_examples&lt;br /&gt;
     print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
           (num_examples, true_count, precision))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def run_training():&lt;br /&gt;
     data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
 &lt;br /&gt;
     with tf.Graph().as_default():&lt;br /&gt;
         images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
             FLAGS.batch_size)&lt;br /&gt;
 &lt;br /&gt;
         logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                  FLAGS.hidden1,&lt;br /&gt;
                                  FLAGS.hidden2)&lt;br /&gt;
 &lt;br /&gt;
         loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
 &lt;br /&gt;
         eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
         summary = tf.summary.merge_all()&lt;br /&gt;
 &lt;br /&gt;
         init = tf.global_variables_initializer()&lt;br /&gt;
 &lt;br /&gt;
         saver = tf.train.Saver()&lt;br /&gt;
 &lt;br /&gt;
         sess = tf.Session()&lt;br /&gt;
 &lt;br /&gt;
         summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
 &lt;br /&gt;
         sess.run(init)&lt;br /&gt;
 &lt;br /&gt;
         for step in xrange(FLAGS.max_steps):&lt;br /&gt;
             start_time = time.time()&lt;br /&gt;
 &lt;br /&gt;
             feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                        images_placeholder,&lt;br /&gt;
                                        labels_placeholder)&lt;br /&gt;
 &lt;br /&gt;
             _, loss_value = sess.run([train_op, loss],&lt;br /&gt;
                                      feed_dict=feed_dict)&lt;br /&gt;
 &lt;br /&gt;
             duration = time.time() - start_time&lt;br /&gt;
 &lt;br /&gt;
             if step % 100 == 0:&lt;br /&gt;
                 print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                 summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                 summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                 summary_writer.flush()&lt;br /&gt;
 &lt;br /&gt;
             if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                 checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                 saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                 print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.train)&lt;br /&gt;
                 print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.validation)&lt;br /&gt;
                 print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                 do_eval(sess,&lt;br /&gt;
                         eval_correct,&lt;br /&gt;
                         images_placeholder,&lt;br /&gt;
                         labels_placeholder,&lt;br /&gt;
                         data_sets.test)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 def main(_):&lt;br /&gt;
     if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
         tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
     tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
     run_training()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     parser = argparse.ArgumentParser()&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--learning_rate&#039;,&lt;br /&gt;
         type=float,&lt;br /&gt;
         default=0.01,&lt;br /&gt;
         help=&#039;Initial learning rate.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--max_steps&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=2000,&lt;br /&gt;
         help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden1&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=128,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--hidden2&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=32,&lt;br /&gt;
         help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--batch_size&#039;,&lt;br /&gt;
         type=int,&lt;br /&gt;
         default=100,&lt;br /&gt;
         help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--input_data_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
         help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--log_dir&#039;,&lt;br /&gt;
         type=str,&lt;br /&gt;
         default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                              &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
         help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
     )&lt;br /&gt;
     parser.add_argument(&lt;br /&gt;
         &#039;--fake_data&#039;,&lt;br /&gt;
         default=False,&lt;br /&gt;
         help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
         action=&#039;store_true&#039;&lt;br /&gt;
     )&lt;br /&gt;
 &lt;br /&gt;
 FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
 tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49037</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49037"/>
		<updated>2017-07-01T12:15:16Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== 딥러닝의 특징 ====&lt;br /&gt;
* 데이터로부터 중요한 특징을 자동으로 학습&lt;br /&gt;
* 수준 별 언어 특성에 대한 통일된 형태 제공 - vector&lt;br /&gt;
* 음소 : 음성 특성을 벡터로 표현, 학습&lt;br /&gt;
* 형태소 : 접두사, 접미사, 어간 등을 벡터로 표현, 결합&lt;br /&gt;
* 문법 : 문장 내의 단어들을 벡터로 표현&lt;br /&gt;
* 의미: 문장이나 구를 벡터로 표현&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49036</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49036"/>
		<updated>2017-07-01T12:13:26Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49035</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49035"/>
		<updated>2017-07-01T12:13:21Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
&lt;br /&gt;
==== CNN ====&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49034</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49034"/>
		<updated>2017-07-01T12:13:04Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
=== 딥러닝과 자연언어처리 ===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
&lt;br /&gt;
==== CNN ====&lt;br /&gt;
&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
==== RNN ==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49033</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49033"/>
		<updated>2017-07-01T12:12:29Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
&lt;br /&gt;
===딥러닝과 자연언어처리===&lt;br /&gt;
* 언어 데이터의 특징 : 불연속적인 심볼의 나열 샘플(문장)별로 길이가 다를 수 있음. 계층적, 재귀적인 구조를 지님&lt;br /&gt;
* 딥러닝은 매우 유연한 모델을 제공함&lt;br /&gt;
*** CNN : 지역적 특성을 가진 데이터의 처리에 좋음(주로 이미지)&lt;br /&gt;
*** RNN : 연속된 데이터들의 처리에 좋음&lt;br /&gt;
*** RecursiveNN: 계층구조를 가진 데이터의 처리에 사용가능&lt;br /&gt;
&lt;br /&gt;
====CNN====&lt;br /&gt;
&lt;br /&gt;
*** 다음 층의 노드가 이전 층 &amp;quot;일부&amp;quot;에만 연결되어 있음&lt;br /&gt;
*** 다음 층의 노드들은 같은 kernel로부터 만들어짐(= 똑같은 계수를 재사용)&lt;br /&gt;
&lt;br /&gt;
====RNN==== &lt;br /&gt;
 *연속된 입력값에 대해 중간 층을 메모리처럼 보고 중간 층을 위한 계수를 재사용&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49032</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49032"/>
		<updated>2017-07-01T12:06:29Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 : ppt참고 ~~너무 빨라 판서를 못함~~&lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49031</id>
		<title>데블스캠프2017/DeepLearningDay</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842017/DeepLearningDay&amp;diff=49031"/>
		<updated>2017-07-01T12:05:30Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;이스트소프트 AI Plus Lab&lt;br /&gt;
* 컴퓨터 비전&lt;br /&gt;
* 자연어 처리&lt;br /&gt;
* 악성코드 탐지&lt;br /&gt;
* 금융시장 예측&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 딥러닝의 원리 ==&lt;br /&gt;
=== 딥러닝의 이해 ===&lt;br /&gt;
* 인공지능&lt;br /&gt;
** 사람만큼이나 사람보다 똑똑한 기계&lt;br /&gt;
* 머신러닝 &lt;br /&gt;
** 더 많은 데이터를 더 빠르게 처리할 수 있지만, 처리 알고리즘은 사람이 만들어야 한다&lt;br /&gt;
** 사람보다 똑똑한 기계를 만들기 위해 사람(생물)이 학습하는 방법을 모델링&lt;br /&gt;
** 데이터로부터 경험적, 귀납적으로 만들어낸 알고리즘에 의해 추론&lt;br /&gt;
** feature와 label&lt;br /&gt;
** 더 좋은 feature들을 추출할 수 있다면, 더욱 쉽게 분류할 수 있다&lt;br /&gt;
** feature engineering &lt;br /&gt;
*** 딥러닝 이전 머신러닝에서 반드시 수행되어야하는 작업&lt;br /&gt;
*** 사람이 정답을 더 잘 찾기 위한 특징을 찾아내고 (-&amp;gt;도메인 전문가) &lt;br /&gt;
*** 사람이 데이터에서 그런 특징을 식별하고 추출하는 알고리즘을 설계하는 것 (-&amp;gt;알고리즘)&lt;br /&gt;
** 단일 층으로 분류가 불가능하다면, 분류가 가능할 때까지 공간을 변형시키면 된다&lt;br /&gt;
** 즉, 다중 층을 사용하면 된다&lt;br /&gt;
* 딥러닝&lt;br /&gt;
** 여러 층을 통째로 학습시키면(차원이 늘어나면) &lt;br /&gt;
** 사람이 찾을 수 있는 특징보다 더 좋은 특징을 찾아 분류를 할 수 있다&lt;br /&gt;
** 이 특징은 사람이 이해하기에는 어려울 수 있다&lt;br /&gt;
** 더 어렵고 복잡한 문제를 해결할 수 있는데 이를 수용력이라 함&lt;br /&gt;
** 딥러닝은 머신러닝 더 넓은 수용력을 가지는 학습 방법&lt;br /&gt;
** 학습할 데이터가 충분히 많아야 더욱 정확하고 복잡한 특징을 추출할 수 있게 된다&lt;br /&gt;
* 딥러닝에 필요한 것들&lt;br /&gt;
** 선형대수학&lt;br /&gt;
** 확률과 통계&lt;br /&gt;
** 다변수 미적분&lt;br /&gt;
** 알고리즘, 최적화&lt;br /&gt;
** 기타 등등&lt;br /&gt;
** 정보이론(엔트로피 ..)&lt;br /&gt;
** 기타 수학적 이론들&lt;br /&gt;
 === 딥러닝의 원리 1 - similarity ===&lt;br /&gt;
** 딥러닝에서는 스스로 좋은 feature를 찾아가기 때문에 최대한 손실이 없는 데이터를 사용하는 것이 유리하다&lt;br /&gt;
** 벡터의 유사도를 나타내는 방법&lt;br /&gt;
** 유클리드 거리(두 벡터의 차이)&lt;br /&gt;
** 코사인 유사도(두 벡터의 내적)&lt;br /&gt;
** 하지만 유사한 데이터라고 해서 유사한 벡터인 것은 아니다&lt;br /&gt;
** 이를 해결하는 것이 머신러닝의 핵심적인 목교&lt;br /&gt;
** 입력층 벡터를 유사하게 -&amp;gt; 입력 데이터의 모델링&lt;br /&gt;
** 마지막 은닉 층 벡터를 유사하게 -&amp;gt; 네트워크 모델링&lt;br /&gt;
** Supervised Learning&lt;br /&gt;
** 분류의 정답인 함수 값을 통해 어떤 데이터들이 분류가 같아야 하고, 분류가 달라야하는지&lt;br /&gt;
** 기준을 가르치는 것&lt;br /&gt;
** 뉴럴 네트워크를 학습한다는 것&lt;br /&gt;
** 학습한다는 것은 정답과의 오차를 줄이는 방향으로 모델 파라미터를 수정해 나가는 것&lt;br /&gt;
** 학습이 잘 된 후에는 어떤 입력에 대해 강하게 반응하려면 가중치가 그 벡터와 유사해 진다&lt;br /&gt;
** 모델링&lt;br /&gt;
** 더 적은 데이터를 가지고 더 적합한 학습을 시킬 수 있도록하는 것이 모델링&lt;br /&gt;
** ex) CNN&lt;br /&gt;
** 응용&lt;br /&gt;
** 변종 악성코드의 탐지와 분류&lt;br /&gt;
** 악성코드의 유사도&lt;br /&gt;
*** 메타데이터가 유사하다&lt;br /&gt;
*** 파일 구조와 내용이 유사&lt;br /&gt;
*** 코드 패턴, 행위 패턴이 유사&lt;br /&gt;
*** 사용하는 API가 유사&lt;br /&gt;
*** 개발자의 습관이 유사&lt;br /&gt;
*** 노리는 대상이나 취약점이 유사&lt;br /&gt;
*** 통신하는 대상이나 패킷이 유사&lt;br /&gt;
*** 압축, 난독화, 암호화, 패키지 방식이 유사&lt;br /&gt;
*** 악성 여부?&lt;br /&gt;
*** 정말 모든 악성 코드를 유사한가?&lt;br /&gt;
*** 정말 모든 정상 코드는 유사한가?&lt;br /&gt;
*** 정말 정상코드와 악성코드는 유사하지 않은가?&lt;br /&gt;
*** 탐지명&lt;br /&gt;
*** 보안 분석가들이 오랜 기간동안 악성코드를 분류&lt;br /&gt;
*** 유사한 악성코드를 같은 탐지명으로 분류할까?&lt;br /&gt;
*** 같은 탐지명으로 분류된 악성코드들은 유사할까?&lt;br /&gt;
*** 하나의 악성코드는 하나의 탐지명으로만 분류할 수 있을까?&lt;br /&gt;
*** 탐지명을 label로 학습을 시킨다 하더라도&lt;br /&gt;
** 신종 악성코드의 탐지와 분류&lt;br /&gt;
*** 학습한 데이터의 유사한 악성코드가 없다&lt;br /&gt;
*** 학습한 훈련 데이터에 같은 분류로 분류된 악성코드가 없다&lt;br /&gt;
=== 딥러닝의 원리 2 - Probability ===&lt;br /&gt;
* 변별 모델 &lt;br /&gt;
** classification, regression&lt;br /&gt;
** 입력 데이터 x가 주어질 때, 간단한 응답 y를 결정&lt;br /&gt;
** 조건부 확률을 사용&lt;br /&gt;
** 조건부 확률의 함정&lt;br /&gt;
** 조건부 활률 뒤집기&lt;br /&gt;
*** 수 많은 경우의 수가 존재하므로 직접 계산하는 것은 굉장히 어렵다&lt;br /&gt;
*** 결합 확률&lt;br /&gt;
*** x,y가 동시에 일어날 확률&lt;br /&gt;
*** 베이즈 정리에 의해 계산     &lt;br /&gt;
*** 결합 확률을 계산&lt;br /&gt;
* 생성모델&lt;br /&gt;
** y라는 속성을 같는 그럴듯한 x를 생성&lt;br /&gt;
** 딥러닝을 활용하면 y뿐만아니라 대량의 x로부터 숨겨진 특징 z를 찾아낼 수 있다&lt;br /&gt;
** 가르친 적 없는 x를 생성&lt;br /&gt;
** 딥러닝 기반 생성모델 VAEs, GANs, Auto-Regressive model, DBNs, RBMs&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== ~~(딥)~~러닝 ==&lt;br /&gt;
[http://cs231n.stanford.edu/]&lt;br /&gt;
 이미지 분류기 &lt;br /&gt;
* 이미지 데이터를 각 픽셀에 대해 rgb로 표현 &lt;br /&gt;
* 다른 시각에서, 다른 성질을 가진 같은 물체를 어떻게 같은 label로 분류할 것인가&lt;br /&gt;
* hard-code로는 분류기를 만드는 것이 불가능함&lt;br /&gt;
=== K Nearest Neighbor Classifier ===&lt;br /&gt;
** 이미지를 학습하여 저장&lt;br /&gt;
** 새로 들어온 이미지를 차이가 가장 작은 값을 통해 분류&lt;br /&gt;
** 비교하는 방법&lt;br /&gt;
** 픽셀값으 절대값 거리 계산&lt;br /&gt;
** 이를 distance로 사용&lt;br /&gt;
** 분류 시간이 linear하게 증가&lt;br /&gt;
** CNN 모델에서는 학습시간은 증가하지만, 분류가 빠름&lt;br /&gt;
** hyper parameter&lt;br /&gt;
** L1 distance vs L2 distance &lt;br /&gt;
** K?&lt;br /&gt;
** 실험적으로 hyper parameter를 결정&lt;br /&gt;
*** 학습 데이터 중 일부를 validation data로 사용&lt;br /&gt;
*** cross-validation&lt;br /&gt;
=== Linear Classification ===&lt;br /&gt;
* 선을 그어 분류하는 방법&lt;br /&gt;
* non-parametric approach&lt;br /&gt;
** KNN 등&lt;br /&gt;
* parametric approach &lt;br /&gt;
** 선의 기울기를 사용하여&lt;br /&gt;
** f(x, W) -&amp;gt; 분류&lt;br /&gt;
** score function f =  W*x + b = 점수의 벡터&lt;br /&gt;
* loss function&lt;br /&gt;
** 학습 데이터에 대해 unhappiness를 측정하는 함수&lt;br /&gt;
** loss function을 작게 만드는 과정 -&amp;gt; optimization&lt;br /&gt;
** ex) SVM loss function&lt;br /&gt;
* softmax classifier&lt;br /&gt;
** score = 특정 분류에 대한 normalized 되지 않은 조건부 확률 &lt;br /&gt;
** loss function = -log(normalized score)&lt;br /&gt;
* optimization&lt;br /&gt;
** loss function을 최소화하는 W을 구하는 과정&lt;br /&gt;
** random search &lt;br /&gt;
** W를 랜덤하게 생성하여 찾은 W 중 가장 loss 값을 가지는 W를 선택&lt;br /&gt;
** 낮은 정확도&lt;br /&gt;
** gradient descent&lt;br /&gt;
** 가능한 작은 h를 사용하여 gradient를 측정&lt;br /&gt;
** loss가 작아지는 방향으로 점진적으로 접근  &lt;br /&gt;
&lt;br /&gt;
== 고래 등에 태운 텐서플로 ==&lt;br /&gt;
https://goo.gl/M1zJVP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if(ubuntu version &amp;lt; 16) instead 18~20page&lt;br /&gt;
* command -&amp;gt; sudo apt install docker.io&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
without GPU(?) instead 22~23page&lt;br /&gt;
# command -&amp;gt; sudo docker rm -f tensorflow&lt;br /&gt;
# command -&amp;gt; sudo docker run -d --net=host --name tensorflow gcr.io/tensorflow/tensorflow&lt;br /&gt;
# connect http://127.0.0.1:8888/&lt;br /&gt;
# try login in webpage&lt;br /&gt;
# command -&amp;gt; sudo docker logs tensorflow&lt;br /&gt;
# copy link to browser like this in log -&amp;gt; http://localhost:8888/?token=00bca78fdb2b3ab7b23eab7105dc639dab72d021ecd5c54f &amp;lt;- copy link like this to browser/&lt;br /&gt;
=== fully_connected_feed.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import argparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from six.moves import xrange&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import input_data&lt;br /&gt;
from tensorflow.examples.tutorials.mnist import mnist&lt;br /&gt;
&lt;br /&gt;
FLAGS = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def placeholder_inputs(batch_size):&lt;br /&gt;
    images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,&lt;br /&gt;
                                                           mnist.IMAGE_PIXELS))&lt;br /&gt;
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))&lt;br /&gt;
    return images_placeholder, labels_placeholder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def fill_feed_dict(data_set, images_pl, labels_pl):&lt;br /&gt;
    images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,&lt;br /&gt;
                                                   FLAGS.fake_data)&lt;br /&gt;
    feed_dict = {&lt;br /&gt;
        images_pl: images_feed,&lt;br /&gt;
        labels_pl: labels_feed,&lt;br /&gt;
    }&lt;br /&gt;
    return feed_dict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def do_eval(sess,&lt;br /&gt;
            eval_correct,&lt;br /&gt;
            images_placeholder,&lt;br /&gt;
            labels_placeholder,&lt;br /&gt;
            data_set):&lt;br /&gt;
&lt;br /&gt;
    true_count = 0&lt;br /&gt;
    steps_per_epoch = data_set.num_examples // FLAGS.batch_size&lt;br /&gt;
    num_examples = steps_per_epoch * FLAGS.batch_size&lt;br /&gt;
    for step in xrange(steps_per_epoch):&lt;br /&gt;
        feed_dict = fill_feed_dict(data_set,&lt;br /&gt;
                                   images_placeholder,&lt;br /&gt;
                                   labels_placeholder)&lt;br /&gt;
        true_count += sess.run(eval_correct, feed_dict=feed_dict)&lt;br /&gt;
    precision = float(true_count) / num_examples&lt;br /&gt;
    print(&#039;  Num examples: %d  Num correct: %d  Precision @ 1: %0.04f&#039; %&lt;br /&gt;
          (num_examples, true_count, precision))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run_training():&lt;br /&gt;
    data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data)&lt;br /&gt;
&lt;br /&gt;
    with tf.Graph().as_default():&lt;br /&gt;
        images_placeholder, labels_placeholder = placeholder_inputs(&lt;br /&gt;
            FLAGS.batch_size)&lt;br /&gt;
&lt;br /&gt;
        logits = mnist.inference(images_placeholder,&lt;br /&gt;
                                 FLAGS.hidden1,&lt;br /&gt;
                                 FLAGS.hidden2)&lt;br /&gt;
&lt;br /&gt;
        loss = mnist.loss(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        train_op = mnist.training(loss, FLAGS.learning_rate)&lt;br /&gt;
&lt;br /&gt;
        eval_correct = mnist.evaluation(logits, labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
        summary = tf.summary.merge_all()&lt;br /&gt;
&lt;br /&gt;
        init = tf.global_variables_initializer()&lt;br /&gt;
&lt;br /&gt;
        saver = tf.train.Saver()&lt;br /&gt;
&lt;br /&gt;
        sess = tf.Session()&lt;br /&gt;
&lt;br /&gt;
        summary_writer = tf.summary.FileWriter(FLAGS.log_dir, sess.graph)&lt;br /&gt;
&lt;br /&gt;
        sess.run(init)&lt;br /&gt;
&lt;br /&gt;
        for step in xrange(FLAGS.max_steps):&lt;br /&gt;
            start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
            feed_dict = fill_feed_dict(data_sets.train,&lt;br /&gt;
                                       images_placeholder,&lt;br /&gt;
                                       labels_placeholder)&lt;br /&gt;
&lt;br /&gt;
            _, loss_value = sess.run([[train_op, loss]],&lt;br /&gt;
                                     feed_dict=feed_dict)&lt;br /&gt;
&lt;br /&gt;
            duration = time.time() - start_time&lt;br /&gt;
&lt;br /&gt;
            if step % 100 == 0:&lt;br /&gt;
                print(&#039;Step %d: loss = %.2f (%.3f sec)&#039; % (step, loss_value, duration))&lt;br /&gt;
                summary_str = sess.run(summary, feed_dict=feed_dict)&lt;br /&gt;
                summary_writer.add_summary(summary_str, step)&lt;br /&gt;
                summary_writer.flush()&lt;br /&gt;
&lt;br /&gt;
            if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps:&lt;br /&gt;
                checkpoint_file = os.path.join(FLAGS.log_dir, &#039;model.ckpt&#039;)&lt;br /&gt;
                saver.save(sess, checkpoint_file, global_step=step)&lt;br /&gt;
                print(&#039;Training Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.train)&lt;br /&gt;
                print(&#039;Validation Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.validation)&lt;br /&gt;
                print(&#039;Test Data Eval:&#039;)&lt;br /&gt;
                do_eval(sess,&lt;br /&gt;
                        eval_correct,&lt;br /&gt;
                        images_placeholder,&lt;br /&gt;
                        labels_placeholder,&lt;br /&gt;
                        data_sets.test)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main(_):&lt;br /&gt;
    if tf.gfile.Exists(FLAGS.log_dir):&lt;br /&gt;
        tf.gfile.DeleteRecursively(FLAGS.log_dir)&lt;br /&gt;
    tf.gfile.MakeDirs(FLAGS.log_dir)&lt;br /&gt;
    run_training()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    parser = argparse.ArgumentParser()&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--learning_rate&#039;,&lt;br /&gt;
        type=float,&lt;br /&gt;
        default=0.01,&lt;br /&gt;
        help=&#039;Initial learning rate.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--max_steps&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=2000,&lt;br /&gt;
        help=&#039;Number of steps to run trainer.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden1&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=128,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 1.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--hidden2&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=32,&lt;br /&gt;
        help=&#039;Number of units in hidden layer 2.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--batch_size&#039;,&lt;br /&gt;
        type=int,&lt;br /&gt;
        default=100,&lt;br /&gt;
        help=&#039;Batch size.  Must divide evenly into the dataset sizes.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--input_data_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/input_data&#039;),&lt;br /&gt;
        help=&#039;Directory to put the input data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--log_dir&#039;,&lt;br /&gt;
        type=str,&lt;br /&gt;
        default=os.path.join(os.getenv(&#039;TEST_TMPDIR&#039;, &#039;/tmp&#039;),&lt;br /&gt;
                             &#039;tensorflow/mnist/logs/fully_connected_feed&#039;),&lt;br /&gt;
        help=&#039;Directory to put the log data.&#039;&lt;br /&gt;
    )&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        &#039;--fake_data&#039;,&lt;br /&gt;
        default=False,&lt;br /&gt;
        help=&#039;If true, uses fake data for unit testing.&#039;,&lt;br /&gt;
        action=&#039;store_true&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
FLAGS, unparsed = parser.parse_known_args()&lt;br /&gt;
tf.app.run(main=main, argv=[sys.argv&amp;amp;#91;0&amp;amp;#93;] + unparsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mnist.py ===&lt;br /&gt;
from __future__ import absolute_import&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import print_function&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
import tensorflow as tf&lt;br /&gt;
&lt;br /&gt;
NUM_CLASSES = 10&lt;br /&gt;
&lt;br /&gt;
IMAGE_SIZE = 28&lt;br /&gt;
IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inference(images, hidden1_units, hidden2_units):&lt;br /&gt;
    with tf.name_scope(&#039;hidden1&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[IMAGE_PIXELS, hidden1_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden1_units&amp;amp;#93;),&lt;br /&gt;
                             name=&#039;biases&#039;)&lt;br /&gt;
        hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;hidden2&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden1_units, hidden2_units]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden1_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros(&amp;amp;#91;hidden2_units&amp;amp;#93;),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)&lt;br /&gt;
&lt;br /&gt;
    with tf.name_scope(&#039;softmax_linear&#039;):&lt;br /&gt;
        weights = tf.Variable(&lt;br /&gt;
            tf.truncated_normal([[hidden2_units, NUM_CLASSES]],&lt;br /&gt;
                                stddev=1.0 / math.sqrt(float(hidden2_units))),&lt;br /&gt;
            name=&#039;weights&#039;)&lt;br /&gt;
        biases = tf.Variable(tf.zeros([[NUM_CLASSES]]),&lt;br /&gt;
                         name=&#039;biases&#039;)&lt;br /&gt;
        logits = tf.matmul(hidden2, weights) + biases&lt;br /&gt;
    return logits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def loss(logits, labels):&lt;br /&gt;
    labels = tf.to_int64(labels)&lt;br /&gt;
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(&lt;br /&gt;
        labels=labels, logits=logits, name=&#039;xentropy&#039;)&lt;br /&gt;
    return tf.reduce_mean(cross_entropy, name=&#039;xentropy_mean&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def training(loss, learning_rate):&lt;br /&gt;
    tf.summary.scalar(&#039;loss&#039;, loss)&lt;br /&gt;
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)&lt;br /&gt;
    global_step = tf.Variable(0, name=&#039;global_step&#039;, trainable=False)&lt;br /&gt;
    train_op = optimizer.minimize(loss, global_step=global_step)&lt;br /&gt;
    return train_op&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evaluation(logits, labels):&lt;br /&gt;
    correct = tf.nn.in_top_k(logits, labels, 1)&lt;br /&gt;
    return tf.reduce_sum(tf.cast(correct, tf.int32))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 딥러닝과 자연어 처리 == &lt;br /&gt;
=== 자연 언어 처리 ===&lt;br /&gt;
* 컴퓨터가 언어를 받아들이고 이해하여 다양한 작업들을 할 수 있게 하는 것&lt;br /&gt;
* 간단한 것부터 어려운 것까지 문제의 범위가 넒음&lt;br /&gt;
&lt;br /&gt;
* 언어학 기반 : 분할(띄어쓰기, 형태소), 품사 태깅, 구문 분석(parsing)&lt;br /&gt;
* 분석 : 문서 분류, 감정 분석, 주제 모델링, 정보 추출&lt;br /&gt;
* 변형 &lt;br /&gt;
* 대화&lt;br /&gt;
&lt;br /&gt;
=== 수준별 언어 특성들 ===&lt;br /&gt;
 음소 -&amp;gt; 형태소 -&amp;gt; 문법 -&amp;gt; 의미(영어)&lt;br /&gt;
* 음소(phoneme) 어떤 언어에서 의미 구별 기능을 갖는 음성 상의 최소 단위&lt;br /&gt;
* 형태소&lt;br /&gt;
* 문법(syntax)  : 문장(, 단락)을 품사 단위로 분해, 분석트리를 생성&lt;br /&gt;
* 의미(semantic) : 문장의 의미를 논리식으로 표현, 언어의 모호함을 제거&lt;br /&gt;
== 인공지능의 미래 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/C%EC%96%B8%EC%96%B4%EA%B0%80%EB%A5%B4%EC%B3%90%EC%A1%B0/5%EC%9B%9430%EC%9D%BC&amp;diff=58329</id>
		<title>새싹교실/2017/C언어가르쳐조/5월30일</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/C%EC%96%B8%EC%96%B4%EA%B0%80%EB%A5%B4%EC%B3%90%EC%A1%B0/5%EC%9B%9430%EC%9D%BC&amp;diff=58329"/>
		<updated>2017-05-30T09:09:32Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 예정 =&lt;br /&gt;
* 다음 주(6/6) : 현충일&lt;br /&gt;
** 어쩔까요?&lt;br /&gt;
* 다다음 주(6/13) : 시험대비 특강&lt;br /&gt;
* 1학기 종료 후&lt;br /&gt;
** 1안 : 여름방학때 한다.&lt;br /&gt;
** 2안 : 2학기에 한다.&lt;br /&gt;
** 3안 : 이대로 안녕한다.&lt;br /&gt;
* 오늘은 실습날&lt;br /&gt;
* #1 : 배열 뒤집기&lt;br /&gt;
** 작성 후 위키에 올려주세요.&lt;br /&gt;
** 입력 : &lt;br /&gt;
** line 1 : 배열의 크기( 0 &amp;lt; N &amp;lt;= 1,000,000)&lt;br /&gt;
** line 2 ~ N + 1 : 배열에 들어갈 값(자연수, &amp;lt; 1,000,000)&lt;br /&gt;
** 출력 : line N + 1 ~ line 2의 값&lt;br /&gt;
** tip : &lt;br /&gt;
** N번보다 적게 볼 수도 있다.&lt;br /&gt;
** (이 문제에서는)배열을 뒤집지 않아도 된다.&lt;br /&gt;
* #2 : 정사각 행렬곱 함수 작성&lt;br /&gt;
** N * N 행렬을 곱한 결과를 반환하는 &#039;&#039;&#039;함수&#039;&#039;&#039; 작성&lt;br /&gt;
** int** matrix_mul(int **s, int **t, int N);&lt;br /&gt;
* #3 : qsort 써보기&lt;br /&gt;
** void qsort(void* base, size_t n, size_t size, int (*comp)(void*, void*)); //&amp;lt;stdlib.h&amp;gt;에 있는 표준 함수&lt;br /&gt;
** 입력 : &lt;br /&gt;
** line 1 : 정렬 할 수의 개수 ( 0 &amp;lt; N &amp;lt;= 1,000,000)&lt;br /&gt;
** line 2 ~ : 정렬 할 수 (양의 정수, &amp;lt; 1,000,000)&lt;br /&gt;
** 출력 : 정렬 된 N개의 수&lt;br /&gt;
** tip :&lt;br /&gt;
** 좋은 정렬법을 아시면 직접 짜보세요!&lt;br /&gt;
** &#039;&#039;&#039;좋은&#039;&#039;&#039; 정렬법!&lt;br /&gt;
= 실습 =&lt;br /&gt;
* #2 테스트 코드&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;stdlib.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int** matrix_mul(int **s, int **t, int N);&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char** argv){&lt;br /&gt;
 	int A[3][3] = {&lt;br /&gt;
 		{1, 1, 2},&lt;br /&gt;
 		{1, 0, 1},&lt;br /&gt;
 		{0, 3, 0}&lt;br /&gt;
 	};&lt;br /&gt;
 	int B[3][3] = {&lt;br /&gt;
 		{2, 1, 3},&lt;br /&gt;
 		{1, 3, 2},&lt;br /&gt;
 		{1, 2, 0}&lt;br /&gt;
 	};&lt;br /&gt;
 	int *parr_A[3] = {A[0], A[1], A[2]};&lt;br /&gt;
 	int *parr_B[3] = {B[0], B[1], B[2]};&lt;br /&gt;
 	int **AB = (void*)0;&lt;br /&gt;
 	int i, j, N = 3;&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;A : \n&amp;quot;);&lt;br /&gt;
 	for(i = 0; i &amp;amp;lt; N; i++){&lt;br /&gt;
 		for(j = 0; j &amp;amp;lt; N; j++){&lt;br /&gt;
 			printf(&amp;quot;%d &amp;quot;, A[i][j]);&lt;br /&gt;
 		}&lt;br /&gt;
 		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;B : \n&amp;quot;);&lt;br /&gt;
 	for(i = 0; i &amp;amp;lt; N; i++){&lt;br /&gt;
 		for(j = 0; j &amp;amp;lt; N; j++){&lt;br /&gt;
 			printf(&amp;quot;%d &amp;quot;, B[i][j]);&lt;br /&gt;
 		}&lt;br /&gt;
 		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 	AB = matrix_mul(parr_A, parr_B, N);&lt;br /&gt;
 	if(AB){&lt;br /&gt;
 		printf(&amp;quot;A x B : \n&amp;quot;);&lt;br /&gt;
 		for(i = 0; i &amp;amp;lt; N; i++){&lt;br /&gt;
 			for(j = 0; j &amp;amp;lt; N; j++){&lt;br /&gt;
 				printf(&amp;quot;%d &amp;quot;, AB[i][j]);&lt;br /&gt;
 			}&lt;br /&gt;
 			printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int** matrix_mul(int **s, int **t, int N){&lt;br /&gt;
     //여기 작성&lt;br /&gt;
 }&lt;br /&gt;
* 안재형&lt;br /&gt;
** #1&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
 	int *i = (int *)malloc(sizeof(int) * 1000000);&lt;br /&gt;
 	int *count_i = (int *)malloc(sizeof(int) * 1000000);&lt;br /&gt;
 	int input;&lt;br /&gt;
 &lt;br /&gt;
 	scanf(&amp;quot;%d&amp;quot;, &amp;amp;amp;input);&lt;br /&gt;
 &lt;br /&gt;
 	for (int sentinel = 0; sentinel &amp;amp;lt; input; sentinel++)&lt;br /&gt;
 	{&lt;br /&gt;
 		scanf(&amp;quot;%d&amp;quot;, &amp;amp;amp;i[sentinel]);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	for (int sentinel = 0; sentinel &amp;amp;lt; input; sentinel++)&lt;br /&gt;
 	{&lt;br /&gt;
 		count_i[sentinel] = i[input - sentinel - 1];&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	for (int sentinel = 0; sentinel &amp;amp;lt; input; sentinel++)&lt;br /&gt;
 	{&lt;br /&gt;
 		printf(&amp;quot;%d &amp;quot;, count_i[sentinel]);&lt;br /&gt;
 	}&lt;br /&gt;
 	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** 이민지&lt;br /&gt;
*** #1&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int arr[10000];&lt;br /&gt;
 	int min[10000];&lt;br /&gt;
 	int i,j, temp;&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;자연수를 몇개 입력하실 건가요? : &amp;quot;);&lt;br /&gt;
 	scanf_s(&amp;quot;%d&amp;quot;, &amp;amp;amp;i);&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;자연수를 입력하세요. : \n&amp;quot;);&lt;br /&gt;
 	for (j = 0; j &amp;amp;lt; i; j++)&lt;br /&gt;
 	{&lt;br /&gt;
 		scanf_s(&amp;quot;%d&amp;quot;, &amp;amp;amp;arr[j]);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	for (j = 0; j &amp;amp;lt; i / 2; j++)&lt;br /&gt;
 	{&lt;br /&gt;
 		min[j] = arr[i - j - 1];&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	for (j = i/2; j &amp;amp;lt; i; j++)&lt;br /&gt;
 	{&lt;br /&gt;
 		min[j] = arr[i - j - 1];&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;배열을 뒤집으면! \n&amp;quot;);&lt;br /&gt;
 	for (j = 0; j &amp;amp;lt; i ; j++)&lt;br /&gt;
 	{&lt;br /&gt;
 		printf(&amp;quot;%d \n&amp;quot;, min[j]);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
= 기타 / 후기 / 방명록 =&lt;br /&gt;
&lt;br /&gt;
-----------------------------------&lt;br /&gt;
[[새싹교실/2017/C언어가르쳐조]]&lt;br /&gt;
[[새싹교실/2017]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4&amp;diff=59076</id>
		<title>새싹교실/2017/코드레이스</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4&amp;diff=59076"/>
		<updated>2017-05-11T03:03:29Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 일정 =&lt;br /&gt;
5월 12일 금요일 예정&lt;br /&gt;
장소 :  208관 6층 pc실&lt;br /&gt;
오후&lt;br /&gt;
7:00 ~ 7:20   참가자 참석 확인,  장비 TEST 및 인터넷 환경 확인, 사용 컴퓨터 확정, 간식 및 식사 배부&lt;br /&gt;
7:30 ~ 9:30   대회 진행&lt;br /&gt;
9:30 ~ 10:00  순위 발표 시상 및 정리&lt;br /&gt;
= 모집 방안 =&lt;br /&gt;
참가자 모집 : 5월 1일 ~ 5월 10일 까지&lt;br /&gt;
참가자   팀 : 새싹 + 강사 1팀으로 출전&lt;br /&gt;
&lt;br /&gt;
Task Force 모집 : 5월 1일 ~ 5월 7일&lt;br /&gt;
Task Force 미팅 : 5월 10일 정모 직후 &lt;br /&gt;
&lt;br /&gt;
= 대회 규정 =&lt;br /&gt;
문제 SET 최종 확정 : 5월 11일&lt;br /&gt;
범위 : C언어 기준 일차원 배열 &lt;br /&gt;
&lt;br /&gt;
* 백준 온라인 저지가 지원하는 모든 언어로 참여 가능&lt;br /&gt;
* 강사는 코딩에 직접적으로 관여할 수 없다.(대리 작성 금지, 오직 아이디어 제공만, 대리 작성 적발시 실격 처리)&lt;br /&gt;
* 강사가 사정으로 참여를 못할 경우 다른 사람을 대신 강사로 참여시킬 수 있다. 다만 이 경우 확실한 사유를 증명해야 하며, 대신 강사로 참여한 사람은 강사 상품을 획득 하지 못한다.&lt;br /&gt;
* 강사 없이 새싹들만 참여 가능하다. 대신 강사로 참여한 사람은 강사 상품을 획득하지 못한다.&lt;br /&gt;
* 올해 문제는 백준 저지에서 TF들이 제작한 문제 set을 기반으로 2시간 진행하는 대회로 한다.&lt;br /&gt;
&lt;br /&gt;
[[새싹교실/2017/코드레이스/TaskForce]]&lt;br /&gt;
= 행사 내용 =&lt;br /&gt;
참가 팀 전원에게 간식 및 저녁 식사 제공&lt;br /&gt;
전체 참가팀의 50% 상품 수여(순위에 따라)&lt;br /&gt;
1등팀 강사 특별 상품 수여&lt;br /&gt;
&lt;br /&gt;
= 대회 사이트 =&lt;br /&gt;
&lt;br /&gt;
= 후기 및 회고 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4/TaskForce&amp;diff=59092</id>
		<title>새싹교실/2017/코드레이스/TaskForce</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4/TaskForce&amp;diff=59092"/>
		<updated>2017-05-11T03:02:23Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TF =&lt;br /&gt;
&lt;br /&gt;
문제 : 박인서, 김성민, 정진경, 김상렬, 채기운, 한재민&lt;br /&gt;
진행 : 김상렬, TBA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 문제 set =&lt;br /&gt;
&lt;br /&gt;
대회 종료 후 공개&lt;br /&gt;
= 사전 모임 = &lt;br /&gt;
TBA&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4&amp;diff=59075</id>
		<title>새싹교실/2017/코드레이스</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EC%BD%94%EB%93%9C%EB%A0%88%EC%9D%B4%EC%8A%A4&amp;diff=59075"/>
		<updated>2017-05-11T03:02:08Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 일정 =&lt;br /&gt;
5월 12일 금요일 예정&lt;br /&gt;
장소 :  208관 6층 pc실&lt;br /&gt;
오후&lt;br /&gt;
7:00 ~ 7:20   참가자 참석 확인,  장비 TEST 및 인터넷 환경 확인, 사용 컴퓨터 확정, 간식 및 식사 배부&lt;br /&gt;
7:30 ~ 9:30   대회 진행&lt;br /&gt;
9:30 ~ 10:00  순위 발표 시상 및 정리&lt;br /&gt;
= 모집 방안 =&lt;br /&gt;
참가자 모집 : 5월 1일 ~ 5월 10일 까지&lt;br /&gt;
참가자   팀 : 새싹 + 강사 1팀으로 출전&lt;br /&gt;
&lt;br /&gt;
Task Force 모집 : 5월 1일 ~ 5월 7일&lt;br /&gt;
Task Force 미팅 : 5월 10일 정모 직후 &lt;br /&gt;
문제 SET 최종 확정 : 5월 11일&lt;br /&gt;
범위 : C언어 기준 일차원 배열 &lt;br /&gt;
&lt;br /&gt;
* 백준 온라인 저지가 지원하는 모든 언어로 참여 가능&lt;br /&gt;
* 강사는 코딩에 직접적으로 관여할 수 없다.(대리 작성 금지, 오직 아이디어 제공만, 대리 작성 적발시 실격 처리)&lt;br /&gt;
* 강사가 사정으로 참여를 못할 경우 다른 사람을 대신 강사로 참여시킬 수 있다. 다만 이 경우 확실한 사유를 증명해야 하며, 대신 강사로 참여한 사람은 강사 상품을 획득 하지 못한다.&lt;br /&gt;
* 강사 없이 새싹들만 참여 가능하다. 대신 강사로 참여한 사람은 강사 상품을 획득하지 못한다.&lt;br /&gt;
* 올해 문제는 백준 저지에서 TF들이 제작한 문제 set을 기반으로 2시간 진행하는 대회로 한다.&lt;br /&gt;
&lt;br /&gt;
[[새싹교실/2017/코드레이스/TaskForce]]&lt;br /&gt;
= 행사 내용 =&lt;br /&gt;
참가 팀 전원에게 간식 및 저녁 식사 제공&lt;br /&gt;
전체 참가팀의 50% 상품 수여(순위에 따라)&lt;br /&gt;
1등팀 강사 특별 상품 수여&lt;br /&gt;
&lt;br /&gt;
= 대회 사이트 =&lt;br /&gt;
&lt;br /&gt;
= 후기 및 회고 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52294</id>
		<title>사탕뽑기</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52294"/>
		<updated>2017-04-12T06:46:44Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 소개 =&lt;br /&gt;
~~이사람 아직도 제목으로 목차만드는 방법 모릅니다~~&lt;br /&gt;
~~아니야 괜찮아 집단지성이 있어~~&lt;br /&gt;
축제 때 사탕뽑기 기계를 만들고 싶어하는 모임&lt;br /&gt;
&lt;br /&gt;
= 인원 =&lt;br /&gt;
* [[고은진]], [[김유진]], 강나래, ~~[[이민욱]](미확정)~~&lt;br /&gt;
* 인원 모집중입니다! 페이지에 이름을 추가해주세요!&lt;br /&gt;
&lt;br /&gt;
= 안내 =&lt;br /&gt;
10월경에 있다고 하는 축제 때 사탕뽑기 기계를 만들어서 ~~돈을 한 번 벌어보자는~~ 임베디드 소프트웨어의 기초를 배우고 기본적인 프로젝트를 해 보자는 것... 지원을 받거나 어떻게 잘 포장해서 공모전에 내는 것도 노려 볼 수 있을 것 같아요. 프로그래밍을 전혀 하지 못하는 사람들도 환영합니다 여기 프로그래밍 할 줄 아는 사람 없어요 ㅠㅠ(기본적으로는 어째 공작소가 될 것 같아요) 아마도 아두이노나 라즈베리파이같은 플랫폼을 이용할 것 같습니다. 같이 합시다 제발요...제발...제발...도와주시와요... 선배님들도 동기들도 커몬커몬...&lt;br /&gt;
사탕뽑기가 가장 어려울 것 같아서 사탕뽑기만 적어 두었지만 777 슬롯머신같은 간단한 기계를 더 만들면 더더욱 재밌을 것 같네요. 제로페이지 오락실٩(๑❛ᴗ❛๑)۶&lt;br /&gt;
&lt;br /&gt;
= 시간 =&lt;br /&gt;
차후 조정할 것 같습니다. 최대한 맞는 시간을 찾아 봐요&lt;br /&gt;
&lt;br /&gt;
= 잡담 =&lt;br /&gt;
* 사탕 포장하는 업무로 들어가도 되나요 - [[박인서]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%9D%B4%EB%AF%BC%EC%9A%B1&amp;diff=66450</id>
		<title>이민욱</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%9D%B4%EB%AF%BC%EC%9A%B1&amp;diff=66450"/>
		<updated>2017-04-12T06:45:53Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 개요 =&lt;br /&gt;
         정식으로! 인사! 드리겠! 습니다!&lt;br /&gt;
         이름만! 들어도! 너무나도! 자랑스런!&lt;br /&gt;
         의혈중앙 통일공대 나라사랑 컴퓨터공학부&lt;br /&gt;
         17학번 ~~&#039;&#039;&#039;카미카제&#039;&#039;&#039;~~ 이민욱입니다.&lt;br /&gt;
~~카미카제 아닙니다 선배님들, 저 &#039;&#039;&#039;술&#039;&#039;&#039; 안좋아해요~~&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;지방러&#039;&#039;&#039;&lt;br /&gt;
* 17학번 ~~소프트웨어학부 읍읍 들어왔는데 일주일만에 학과가 사라진데~~ 컴퓨터공학부 재학중&lt;br /&gt;
* 닉네임 : makerdark98 ~~중2때 지은거라 중2중2한 느낌~~&lt;br /&gt;
* 집부는 ~~클린~~정보통신부&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
== 전공 ==&lt;br /&gt;
* 관심있는분야 : 머신러닝, 빅데이터&lt;br /&gt;
&lt;br /&gt;
* 좋아하는 언어 : C/C++, &lt;br /&gt;
&lt;br /&gt;
관심있는 언어 : Python, Scala&lt;br /&gt;
~~못해도 잘봐주세요~~= 활동 =&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
&lt;br /&gt;
* [[새싹교실/2017/따라와반]]&lt;br /&gt;
* [[대수능/미적분학]]&lt;br /&gt;
* [[사탕뽑기]](미확정?)&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
&lt;br /&gt;
== 2017년 ==&lt;br /&gt;
* 머신러닝 공부?&lt;br /&gt;
* 학점 잘맞기???&lt;br /&gt;
= 개인 =&lt;br /&gt;
= 방명록 =&lt;br /&gt;
* 다음 저격할 선배님은 누구인가요 - [[박인서]]&lt;br /&gt;
* |- 형이요! - [[이민욱]]&lt;br /&gt;
** 역시 무서운 후배님이군요 ㄷㄷ - [[박인서]]&lt;br /&gt;
* 재밌는 후배님 ㅋㅋㅋㅋ - [[김민재]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52293</id>
		<title>사탕뽑기</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52293"/>
		<updated>2017-04-12T06:36:44Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 소개 =&lt;br /&gt;
~~이사람 아직도 제목으로 목차만드는 방법 모릅니다~~&lt;br /&gt;
~~아니야 괜찮아 집단지성이 있어~~&lt;br /&gt;
축제 때 사탕뽑기 기계를 만들고 싶어하는 모임&lt;br /&gt;
&lt;br /&gt;
= 인원 =&lt;br /&gt;
* [[고은진]], [[김유진]], 강나래, [[이민욱]]&lt;br /&gt;
* 인원 모집중입니다! 페이지에 이름을 추가해주세요!&lt;br /&gt;
&lt;br /&gt;
= 안내 =&lt;br /&gt;
10월경에 있다고 하는 축제 때 사탕뽑기 기계를 만들어서 ~~돈을 한 번 벌어보자는~~ 임베디드 소프트웨어의 기초를 배우고 기본적인 프로젝트를 해 보자는 것... 지원을 받거나 어떻게 잘 포장해서 공모전에 내는 것도 노려 볼 수 있을 것 같아요. 프로그래밍을 전혀 하지 못하는 사람들도 환영합니다 여기 프로그래밍 할 줄 아는 사람 없어요 ㅠㅠ(기본적으로는 어째 공작소가 될 것 같아요) 아마도 아두이노나 라즈베리파이같은 플랫폼을 이용할 것 같습니다. 같이 합시다 제발요...제발...제발...도와주시와요... 선배님들도 동기들도 커몬커몬...&lt;br /&gt;
사탕뽑기가 가장 어려울 것 같아서 사탕뽑기만 적어 두었지만 777 슬롯머신같은 간단한 기계를 더 만들면 더더욱 재밌을 것 같네요. 제로페이지 오락실٩(๑❛ᴗ❛๑)۶&lt;br /&gt;
&lt;br /&gt;
= 시간 =&lt;br /&gt;
차후 조정할 것 같습니다. 최대한 맞는 시간을 찾아 봐요&lt;br /&gt;
&lt;br /&gt;
= 잡담 =&lt;br /&gt;
* 사탕 포장하는 업무로 들어가도 되나요 - [[박인서]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52292</id>
		<title>사탕뽑기</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%82%AC%ED%83%95%EB%BD%91%EA%B8%B0&amp;diff=52292"/>
		<updated>2017-04-12T06:36:35Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
= 소개 =&lt;br /&gt;
~~이사람 아직도 제목으로 목차만드는 방법 모릅니다~~&lt;br /&gt;
~~아니야 괜찮아 집단지성이 있어~~&lt;br /&gt;
축제 때 사탕뽑기 기계를 만들고 싶어하는 모임&lt;br /&gt;
&lt;br /&gt;
= 인원 =&lt;br /&gt;
* [[고은진]], [[김유진]], 강나래, 이민욱&lt;br /&gt;
* 인원 모집중입니다! 페이지에 이름을 추가해주세요!&lt;br /&gt;
&lt;br /&gt;
= 안내 =&lt;br /&gt;
10월경에 있다고 하는 축제 때 사탕뽑기 기계를 만들어서 ~~돈을 한 번 벌어보자는~~ 임베디드 소프트웨어의 기초를 배우고 기본적인 프로젝트를 해 보자는 것... 지원을 받거나 어떻게 잘 포장해서 공모전에 내는 것도 노려 볼 수 있을 것 같아요. 프로그래밍을 전혀 하지 못하는 사람들도 환영합니다 여기 프로그래밍 할 줄 아는 사람 없어요 ㅠㅠ(기본적으로는 어째 공작소가 될 것 같아요) 아마도 아두이노나 라즈베리파이같은 플랫폼을 이용할 것 같습니다. 같이 합시다 제발요...제발...제발...도와주시와요... 선배님들도 동기들도 커몬커몬...&lt;br /&gt;
사탕뽑기가 가장 어려울 것 같아서 사탕뽑기만 적어 두었지만 777 슬롯머신같은 간단한 기계를 더 만들면 더더욱 재밌을 것 같네요. 제로페이지 오락실٩(๑❛ᴗ❛๑)۶&lt;br /&gt;
&lt;br /&gt;
= 시간 =&lt;br /&gt;
차후 조정할 것 같습니다. 최대한 맞는 시간을 찾아 봐요&lt;br /&gt;
&lt;br /&gt;
= 잡담 =&lt;br /&gt;
* 사탕 포장하는 업무로 들어가도 되나요 - [[박인서]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43708</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43708"/>
		<updated>2017-04-06T02:02:08Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
** Slack : atez&lt;br /&gt;
** Telegram&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* Chaos 알고리즘 실력반 참여&lt;br /&gt;
** 푼 문제 : 13328, 11444, 2748, 10830, 1629, 1965, 12015, 1937, 2352, 11727&lt;br /&gt;
** 배운내용: LIS(NlogN, N^2), DP기초, Fast Exponential, Matrix Squaring, STL::lower_bound, Matrix Fast Exponential&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, ~~#406자살..~~, #Education 18, #407&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
* 스티머즈 부회장님 잘 부탁드려여 - [[박인서]]&lt;br /&gt;
** 헉 ZP작년회장님 너무 잘생기셨어요 - [[김성민]]&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일, 3월 29일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58506</id>
		<title>새싹교실/2017/꽃밭/0403</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58506"/>
		<updated>2017-04-03T06:43:23Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 후기 =&lt;br /&gt;
== 유진 ==&lt;br /&gt;
&lt;br /&gt;
 저번에 한 건 좀 어려웠는데, 오늘은 딱 적당한 난이도 였던거 같아요....ㅎㅎ&lt;br /&gt;
매번 잘 가르쳐 주셔서 감사하고, 열심히 할게요...ㅎ&lt;br /&gt;
== 혜민 ==&lt;br /&gt;
&lt;br /&gt;
 이번에 배운건 적절한 난이도여서 좋았고 재밌었어요!!&lt;br /&gt;
계속 열심히 배우겠습니당&lt;br /&gt;
== 현지 ==&lt;br /&gt;
 수업시간에 교수님이 조건문에 대해서 말씀하실때 너무 다 알고 있다는 가정하에 수업하시는 것 같아서 이해가 안되었는데 오늘 조건문을 배우고 나니 정말 별거 아니였다는 것을 알게 되었다. 쉽게 이해가 되었고 생각보다 쉬운 내용인것 같다.&lt;br /&gt;
수업 피드백:이해가 쉽게 잘 되고 머리속에 쏙쏙 들어와요 ㅎㅎ&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58503</id>
		<title>새싹교실/2017/꽃밭/0403</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58503"/>
		<updated>2017-04-03T06:38:52Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 후기 =&lt;br /&gt;
== 유진 ==&lt;br /&gt;
&lt;br /&gt;
== 혜민 ==&lt;br /&gt;
&lt;br /&gt;
== 현지 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58502</id>
		<title>새싹교실/2017/꽃밭/0403</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD/0403&amp;diff=58502"/>
		<updated>2017-04-03T06:38:39Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: {CREATE}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 후기 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD&amp;diff=58382</id>
		<title>새싹교실/2017/꽃밭</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD&amp;diff=58382"/>
		<updated>2017-04-03T06:38:25Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 구성원 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 물주는사람&lt;br /&gt;
| 이지수&lt;br /&gt;
| 14학번&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 꽃&lt;br /&gt;
| 김혜민&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 17학번&lt;br /&gt;
|-&lt;br /&gt;
| 유진&lt;br /&gt;
|-&lt;br /&gt;
| 이현지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
멘티들 너무 사랑스럽고 예뻐요!! 저는 행복한 멘토입니다..&lt;br /&gt;
= 목표 =&lt;br /&gt;
어려운 실습, 내 힘으로 해보자!&lt;br /&gt;
&lt;br /&gt;
== 3월 24일(금) 수업 ==&lt;br /&gt;
[[새싹교실/2017/꽃밭/0324|3월24일 수업]]&lt;br /&gt;
&lt;br /&gt;
* C언어란&lt;br /&gt;
* C 소스코드가 .exe가 되는 과정&lt;br /&gt;
* 변수, 자료형&lt;br /&gt;
&lt;br /&gt;
== [[새싹교실/2017/꽃밭/0328|3월 28일(화) 수업]] ==&lt;br /&gt;
[[새싹교실/2017/꽃밭/0328|3월28일 수업]]&lt;br /&gt;
&lt;br /&gt;
* 아스키 코드&lt;br /&gt;
* 버퍼 - 입력을 저장하는 공간&lt;br /&gt;
* 반복문 for문&lt;br /&gt;
&lt;br /&gt;
== [[새싹교실/2017/꽃밭/0403|4월 3일(월) 수업]] ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43701</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43701"/>
		<updated>2017-03-28T10:48:23Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* Chaos 알고리즘 실력반 참여&lt;br /&gt;
** 푼 문제 : 13328, 11444, 2748, 10830, 1629, 1965, 12015, 1937, 2352, 11727&lt;br /&gt;
** 배운내용: LIS(NlogN, N^2), DP기초, Fast Exponentail, Matrix Squaring, STL::lower_bound&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, ~~#406자살..~~, #Education 18&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43700</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43700"/>
		<updated>2017-03-28T10:47:12Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* Chaos 알고리즘 실력반 참여&lt;br /&gt;
** 푼 문제 : 13328, 11444, 2748, 10830, 1629, 1965, 12015, 1937, 2352, 11727&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, ~~#406자살..~~, #Education 18&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43699</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43699"/>
		<updated>2017-03-28T10:37:07Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, ~~#406자살..~~, #Education 18&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43698</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43698"/>
		<updated>2017-03-28T10:36:47Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, #406, #Education 18&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43697</id>
		<title>김성민</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%EC%84%B1%EB%AF%BC&amp;diff=43697"/>
		<updated>2017-03-28T10:36:35Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 개요 =&lt;br /&gt;
14학번 김성민 입니다.&lt;br /&gt;
&lt;br /&gt;
= 관심사 =&lt;br /&gt;
* 글쎄요.. 요샌 글쎄..&lt;br /&gt;
== Game ==&lt;br /&gt;
** 4년차(2017년 기준) 리듬게이머 입니다. 시작한지 얼마 안되었네요..&lt;br /&gt;
;  : 님들이 하시는 대부분의 온라인 게임을 합니다.&lt;br /&gt;
&lt;br /&gt;
== SNS ==&lt;br /&gt;
** [http://www.facebook.com/luthnesia.kim 페이스북] 입니다. (일상생활)&lt;br /&gt;
** 트위터 합니다. (일상생활 + &#039;덕질&#039; )&lt;br /&gt;
&lt;br /&gt;
== Major ==&lt;br /&gt;
** [https://github.com/shieldnet github] &amp;lt;&amp;lt;별 거 없습니다.&lt;br /&gt;
&lt;br /&gt;
== Dream ==&lt;br /&gt;
** 가상현실 쪽으로 진로를 생각하고 있습니다.&lt;br /&gt;
= Ability =&lt;br /&gt;
* Language (Frequently Use)&lt;br /&gt;
** C++&lt;br /&gt;
&lt;br /&gt;
* Language (Usable)&lt;br /&gt;
** C / C++&lt;br /&gt;
** C#&lt;br /&gt;
** Java&lt;br /&gt;
* Web&lt;br /&gt;
** JavaScript ( Learning... )&lt;br /&gt;
* Drawing&lt;br /&gt;
** Tablet&lt;br /&gt;
** With Sharp Pencil&lt;br /&gt;
&lt;br /&gt;
* ETC&lt;br /&gt;
** 미숙한 알고리즘 문제풀이er(C++)&lt;br /&gt;
** Linux - Cent OS&lt;br /&gt;
= 활동 내역 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* 스티머즈 부회장(2017)&lt;br /&gt;
* 군생활 마무리 및 복학 (~3.24)&lt;br /&gt;
* JLPT N2(17년에 땄으니..)&lt;br /&gt;
* [[AlgorithmStudy/2017]] 참여&lt;br /&gt;
* [https://code.google.com/codejam &#039;&#039;&#039;&#039;&#039;GoogleCodeJam 2017&#039;&#039;&#039;&#039;&#039;] 참가&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #404, #406&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 군생활&lt;br /&gt;
* Google Code Jam - Qulification Round 통과 (OK )&lt;br /&gt;
* JM책으로 알고리즘 공부중...  (OK )&lt;br /&gt;
     [https://algospot.com/ Algospot]&lt;br /&gt;
* Dovelet.com에서 Algorithm 문제 풀면서 공부중...  (OK )&lt;br /&gt;
* Codeforces 꾸준히 참여중  (OK )&lt;br /&gt;
* 군대에서 C++ 독학 완료  (OK )&lt;br /&gt;
* C#, C++ STL, JM책 독학중...  (OK )&lt;br /&gt;
* 책 안사고 [http://www.w3schools.com/ Google-ing] 으로 JavaScript 독학하기.(new!)&lt;br /&gt;
* JLPT N2 ( OK ) -떨어질 줄 알았는데-&lt;br /&gt;
* [http://www.codeforces.com/ &#039;&#039;&#039;&#039;&#039;Codeforces&#039;&#039;&#039;&#039;&#039; 참가] &lt;br /&gt;
     #366, #368, #AIM Tech R3, #369, #371, #373, #374, #IntelCodeChallenge, #375, #TechnoCup, #376, #377,&lt;br /&gt;
     #CanadaCup 2016, #379,#384, #388&lt;br /&gt;
== 2015 ==&lt;br /&gt;
* 입대 ( 2015.06.25 )&lt;br /&gt;
* 프로젝트 \ Project AI - Sub story Writing (종료)&lt;br /&gt;
&lt;br /&gt;
== 2014 ==&lt;br /&gt;
* Zeropage 가입&lt;br /&gt;
* 새싹하다가 반이..&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 계획 =&lt;br /&gt;
== 2017 ==&lt;br /&gt;
* ~~진짜 전역..~~ 전역함(3.24)&lt;br /&gt;
* Java 공부하기&lt;br /&gt;
* C# 및 Unity 공부하기&lt;br /&gt;
* JLPT N1&lt;br /&gt;
* TOEIC 900↑&lt;br /&gt;
* 교환학생 준비 (언어 및 정보)&lt;br /&gt;
&lt;br /&gt;
== 2016 ==&lt;br /&gt;
* 전역 (빨리좀..)&lt;br /&gt;
* Java 공부하기 (Js..도..?)&lt;br /&gt;
* TOEIC &amp;gt;= 900 &lt;br /&gt;
== 관심있는 페이지 ==&lt;br /&gt;
* [http://zeropage.org]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
= Visit =&lt;br /&gt;
* 방명록 바랍니다 - [[김성민]]&lt;br /&gt;
* 킁킁 - [[권준혁]]&lt;br /&gt;
* 컹컹 - &amp;amp;#91;starl1ght&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[ZeroPagers]]&lt;br /&gt;
= 정모 =&lt;br /&gt;
* 2017년 : 3월 17일, 3월 22일&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD&amp;diff=58359</id>
		<title>새싹교실/2017/꽃밭</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EA%BD%83%EB%B0%AD&amp;diff=58359"/>
		<updated>2017-03-24T09:56:14Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: {CREATE}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 구성원 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 튜터&lt;br /&gt;
| 이지수&lt;br /&gt;
| 14학번&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 튜티&lt;br /&gt;
| 김혜민&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 17학번&lt;br /&gt;
|-&lt;br /&gt;
| 유진&lt;br /&gt;
|-&lt;br /&gt;
| 이현지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 목표 =&lt;br /&gt;
어려운 실습, 내 힘으로 해보자!&lt;br /&gt;
&lt;br /&gt;
== 첫번째 수업(3월24일) ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017&amp;diff=58231</id>
		<title>새싹교실/2017</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017&amp;diff=58231"/>
		<updated>2017-03-24T09:13:42Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
[[새싹교실/2017/진행]]&lt;br /&gt;
[[새싹교실/2017/설명회]]&lt;br /&gt;
&lt;br /&gt;
교육 참고 사이트&lt;br /&gt;
http://www.soen.kr&lt;br /&gt;
[http://zeropage.org/index.php?mid=fresh&amp;amp;category=102321&amp;amp;document_srl=103605 강사메뉴얼]&lt;br /&gt;
&lt;br /&gt;
= 반 =&lt;br /&gt;
연락이 완료된 반은 해당 테이블을 작성을 해 주세요.&lt;br /&gt;
&lt;br /&gt;
ex)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 강사&lt;br /&gt;
| 반 페이지&lt;br /&gt;
| 학생&lt;br /&gt;
|-&lt;br /&gt;
| 홍길동&lt;br /&gt;
| /예시반&lt;br /&gt;
| 김길동, 이길동, 박길동&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
페이지 제작시 &#039;/예시반&#039;으로 페이지명을 지어주세요!! &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 번호&lt;br /&gt;
| 반 페이지&lt;br /&gt;
| 강사&lt;br /&gt;
| 학생&lt;br /&gt;
| 기타&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;amp;#91;a&amp;amp;#93;&lt;br /&gt;
| 김경찬&lt;br /&gt;
| 서율아, 윤연경, 이민희&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[새싹교실/2017/작살나조]]&lt;br /&gt;
| 김록기&lt;br /&gt;
| 김두성, 범동권, 정재현&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;amp;#91;c&amp;amp;#93;&lt;br /&gt;
| 김한성&lt;br /&gt;
| 고은진, 박시현&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[새싹교실/2017/내무반]]&lt;br /&gt;
| 남효민&lt;br /&gt;
| 박채린, 조현민, 한윤진&lt;br /&gt;
| 전과생&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [[새싹교실/2017/따라와반]]&lt;br /&gt;
| [[박인서]]&lt;br /&gt;
| 신원준, 이민욱, 정석우&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [[새싹교실/2017/공기반소리반]]&lt;br /&gt;
| [[박인서]]&lt;br /&gt;
| 정인호, 최리나&lt;br /&gt;
| 편입생&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| &amp;amp;#91;g&amp;amp;#93;&lt;br /&gt;
| 박주현&lt;br /&gt;
| 강창훈, 손명성&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;amp;#91;h&amp;amp;#93;&lt;br /&gt;
| 성  훈&lt;br /&gt;
| 안재형, 이민지, 김경태&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| &amp;amp;#91;i&amp;amp;#93;&lt;br /&gt;
| 이민규&lt;br /&gt;
| 주광우, 최기수, 한재현&lt;br /&gt;
| 전과생&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [[새싹교실/2017/무예이십사반]]&lt;br /&gt;
| 15이원준&lt;br /&gt;
| 김휘진, 정진욱&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [[새싹교실/2017/꽃밭]]&lt;br /&gt;
| 이지수&lt;br /&gt;
| 김혜민, 유진, 이현지&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| [[새싹교실/2017/우리가최고조]]&lt;br /&gt;
| 이  철&lt;br /&gt;
| 강소정, 이서현&lt;br /&gt;
| 전과생&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| [[새싹교실/2017/한조]]&lt;br /&gt;
| 장용운&lt;br /&gt;
| 정재형, 조원희&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [[새싹교실/2017/아이스크림]]&lt;br /&gt;
| 정건모&lt;br /&gt;
| 이해인, 정용준, 한승남&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| &amp;amp;#91;o&amp;amp;#93;&lt;br /&gt;
| 정우현&lt;br /&gt;
| 여일구, 최성진&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| [[새싹교실/2017/studio.h]]&lt;br /&gt;
| 조현성&lt;br /&gt;
| 문법식, 박상현, 조성민&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| [[새싹교실/2017/예쁘조]]&lt;br /&gt;
| 천준현&lt;br /&gt;
| 김유진, 박진영, 양수영&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [[새싹교실/2017/로켓단]]&lt;br /&gt;
| 한재민&lt;br /&gt;
| 방성원, 임창환, 한태균&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
= 참고 자료 =&lt;br /&gt;
새싹교실의 진행은 반 내에서 자율적으로 이루어집니다. 각 반에서의 진행을 돕기 위해 이전 새싹교실 진행 기록 및 참고 자료들을 정리해 드립니다.&lt;br /&gt;
&lt;br /&gt;
== 수업 자료 ==&lt;br /&gt;
* [[새싹교실/2011#s-2|2011년 가이드라인]]&lt;br /&gt;
* [[새싹교실/2011#s-4|2011년 커리큘럼 예시]]&lt;br /&gt;
* [[새싹교실/2012/새싹교실강사교육|2012년 새싹 강사 교육]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.soen.kr/ 참고 커리큘럼 (좌측 목차)]&lt;br /&gt;
* [http://www.compileonline.com/compile_c_online.php 온라인 컴파일러]&lt;br /&gt;
* [http://www.cplusplus.com/reference/clibrary/ C 함수 라이브러리]&lt;br /&gt;
&lt;br /&gt;
* [[새싹교실/2013]]&lt;br /&gt;
* [[새싹교실/2014]]&lt;br /&gt;
* [[새싹교실/2015]]&lt;br /&gt;
* [[새싹교실/2016]]&lt;br /&gt;
* [[HowTo/StudyProgrammingLanguage]]&lt;br /&gt;
== 위키 안내 ==&lt;br /&gt;
위키에는 가이드라인, 커리큘럼, 문제 등 이전 새싹 교실에서 쓰인 자료들이 많이 있습니다. 위키는 튜터와 튜티들이 이용 할 수 있는 학습 도구이기도 하며, 미래의 튜터 튜티를 위한 안내서가 되기도 하고, 활동양의 지표로 이용되기도 합니다. 추후 지원을 하게 될 경우 위키 페이지를 기준으로 지원을 해 드리게 됩니다.&lt;br /&gt;
* 로그인 및 회원 가입: 상단 &#039;환경설정&#039; 클릭&lt;br /&gt;
* 글 편집하기: 우상단 &#039;편집&#039; 아이콘 클릭&lt;br /&gt;
* [[HelpOnEditing]]: 위키 편집 안내서&lt;br /&gt;
** [[HelpOnFormatting]]&lt;br /&gt;
** [[HelpOnHeadlines]]&lt;br /&gt;
** [[HelpOnLists]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EB%94%B0%EB%9D%BC%EC%99%80%EB%B0%98/%EA%B3%BC%EC%A0%9C%EB%B0%A9&amp;diff=58804</id>
		<title>새싹교실/2017/따라와반/과제방</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EB%94%B0%EB%9D%BC%EC%99%80%EB%B0%98/%EA%B3%BC%EC%A0%9C%EB%B0%A9&amp;diff=58804"/>
		<updated>2017-03-21T11:16:46Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: {CREATE}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 1회차 - 자바 =&lt;br /&gt;
* [https://www.acmicpc.net/problem/2748 피보나치 수 2]&lt;br /&gt;
== 이민욱 ==&lt;br /&gt;
 (여기에 코드를)&lt;br /&gt;
&lt;br /&gt;
== 정석우 ==&lt;br /&gt;
 (여기에 코드를)&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EB%94%B0%EB%9D%BC%EC%99%80%EB%B0%98&amp;diff=58800</id>
		<title>새싹교실/2017/따라와반</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2017/%EB%94%B0%EB%9D%BC%EC%99%80%EB%B0%98&amp;diff=58800"/>
		<updated>2017-03-21T11:15:06Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;어이 거기 모두 &#039;&#039;&#039;따라와반&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= 참가원 및 시간 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 보스&lt;br /&gt;
| [[박인서]]&lt;br /&gt;
| 15학번&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 수행원&lt;br /&gt;
| [[신원준]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 17학번&lt;br /&gt;
|-&lt;br /&gt;
| [[이민욱]]&lt;br /&gt;
|-&lt;br /&gt;
| [[정석우]]&lt;br /&gt;
|}&lt;br /&gt;
* 자료구조 : 목요일 15시 ~ 17시&lt;br /&gt;
* 자바 : 화요일 17시 ~ 19시&lt;br /&gt;
&lt;br /&gt;
= 목표 =&lt;br /&gt;
* 남들이 C언어에서 헤메이고 있을 때, 우리는 자료구조와 자바를 익힐 예정&lt;br /&gt;
* 어디 한번 우리를 &#039;&#039;&#039;따라와반&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= 정복 계획 및 진행 =&lt;br /&gt;
* 자료구조는 [[새싹교실/2017/따라와반/자료구조|항목]] 참조&lt;br /&gt;
* 자바는 [[새싹교실/2017/따라와반/자바|항목]] 참조&lt;br /&gt;
* 과제방은 [[새싹교실/2017/따라와반/과제방|항목]] 참조&lt;br /&gt;
&lt;br /&gt;
= 코멘트 =&lt;br /&gt;
* 수행원들이 저 죽일까봐 무서워여 - [[박인서]]&lt;br /&gt;
* 보스가 무서워여 - [[정석우]]&lt;br /&gt;
** 저는 무섭지 않습니다..ㅠ - [[박인서]]&lt;br /&gt;
&lt;br /&gt;
-----------------------------------&lt;br /&gt;
[[새싹교실/2017]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=AlgorithmStudy/2017&amp;diff=27668</id>
		<title>AlgorithmStudy/2017</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=AlgorithmStudy/2017&amp;diff=27668"/>
		<updated>2017-03-16T02:07:17Z</updated>

		<summary type="html">&lt;p&gt;165.194.35.21: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[알고리즘]]&lt;br /&gt;
&lt;br /&gt;
== 구성원 ==&lt;br /&gt;
&lt;br /&gt;
참가희망자 (셀프추가) : 정진경, 김성민(14)&lt;br /&gt;
== 진행 방법 ==&lt;br /&gt;
&lt;br /&gt;
논의 중&lt;br /&gt;
&lt;br /&gt;
[[AlgorithmStudy/2017/진행제안]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>165.194.35.21</name></author>
	</entry>
</feed>