tag:blogger.com,1999:blog-95881122024-03-18T02:51:49.824-07:00Edward J. Yoon's BlogTechnologies, Open Source & My life Story.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.comBlogger434125tag:blogger.com,1999:blog-9588112.post-38312613385581062482021-11-23T00:00:00.003-08:002021-11-23T00:02:02.486-08:00Running cv2 on Amazon LinuxTried import cv2 within python application, but it gives below error:
<br /><br /><span style="background-color: #eeeeee;">
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
</span><br /><br />
It because of a C include file was missing. I tried to install <span style="background-color: #eeeeee;">libgl1-mesa-glx</span> but, Amazon Linux throws no package named which can <span style="background-color: #eeeeee;">libgl1-mesa-glx</span> be used.
<br /><br />
Don't panic.
<br /><br />
You should use yum to search for the package containing the missing file.
<br /><br /><span style="background-color: #eeeeee;">
$ sudo yum provides */GL/gl.h
</span><br /><br />
So now you can see the package name is <span style="background-color: #eeeeee;">mesa-libGL-devel</span> and you can install it
<br /><br /><span style="background-color: #eeeeee;">
$ sudo yum install mesa-libGL-devel</span><div><span style="background-color: #eeeeee;"><br /></span></div><div><span style="background-color: #eeeeee;"><br /></span></div>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-20191832381073399182021-01-19T05:37:00.005-08:002021-01-19T05:38:33.157-08:00BMW 528i 시거잭 전원 안들어올 때, 퓨즈 교체<p>패밀리 세단으로 새차 구입은 좀 무리일 것 같아서, 중고로 하나 얻어왔습니다.<br />중고차라고 티 내는건지 :-) 시거잭에 전원이 안들어오더군요.<br /><br />요즘 참 세상 좋아졌다고 생각드는게, 유튜브에서 시거잭 전원 불량에 대한 단서를 얻었습니다.<br />바로 퓨즈가 나가면 그런다는건데요.<br /><br />조수석에 서랍(?)을 열어보면 퓨즈 박스가 있습니다. 맨 왼쪽라인 아래서 두번째 20A 라고 써있는 퓨즈가 나가면 시거잭에 전원이 끊기게 됩니다.</p><p><br /><a href="https://1.bp.blogspot.com/-yqOq_wQBheo/YAbfuc4uC-I/AAAAAAAAZMU/ZsBJ8y_QDfs_rCYPLCWnYAWAZsbhuLsaACLcBGAsYHQ/s2578/20210116_121046.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1220" data-original-width="2578" height="302" src="https://1.bp.blogspot.com/-yqOq_wQBheo/YAbfuc4uC-I/AAAAAAAAZMU/ZsBJ8y_QDfs_rCYPLCWnYAWAZsbhuLsaACLcBGAsYHQ/w640-h302/20210116_121046.jpg" width="640" /></a></p><p><br />테스터기 같은게 없어서 그냥 뽑아봤더니 역시나 퓨즈가 나갔더군요. <br />쿠팡에서 20 암페어 대형 퓨즈를 50원에 구매해서 교체 했습니다. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ppk97QNNLkY/YAbfudoS5TI/AAAAAAAAZMY/p5CQQN4Rgj4NdQLs4kCm7lH33G154z_YQCLcBGAsYHQ/s2578/20210119_223159.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2578" data-original-width="1220" height="640" src="https://1.bp.blogspot.com/-ppk97QNNLkY/YAbfudoS5TI/AAAAAAAAZMY/p5CQQN4Rgj4NdQLs4kCm7lH33G154z_YQCLcBGAsYHQ/w302-h640/20210119_223159.jpg" width="302" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">곧바로 문제 해결 끗.</div><br /><p></p>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com9tag:blogger.com,1999:blog-9588112.post-1980812554499020722021-01-06T01:22:00.006-08:002021-01-11T02:52:41.978-08:00대규모 서비스와 데이터 처리 기술<p>개발자 컨퍼런스같은 것도 방문한게 언제인지 까마득합니다. 코로나로 왠지 교류가 많이 없어졌습니다.</p><p><br /></p><p>패스트캠퍼스로부터 좋은 기회를 얻어 강연을 하나 오픈하였습니다.</p><p>제가 강연에서 주로 다룰 내용은, 인터넷 역사 이래 발전해온 서버 사이드 기술들에 대해 아는 만큼 총 망라하려고 하였습니다.</p><p><br /></p><p>데이터 모델링, 디자인 패턴 하나하나가 모두 광범위한 주제라 뭔가 꽉꽉 채우려고 했지만 다 담지는 못한 것 같아 다소 아쉽지만, 엔지니어링 커리어 발전을 위해 어떤 방향성으로 나아가야할지에 대한 물음에는 충분히 가이드를 해줄거라고 생각합니다.</p><p><br /></p><p>(상단의 링크 배너 클릭) 도움 되시는 분들이 계시길 바라겠습니다!</p>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com3tag:blogger.com,1999:blog-9588112.post-65390553088734316372019-10-03T20:22:00.000-07:002019-10-03T20:38:48.809-07:00공유 모빌리티 회사로 합류<h4>
공유 모빌리티 시장</h4>
<div class="separator" style="clear: both; text-align: left;">
여러 자료를 살펴보니 2010년부터 공유 모빌리티 시장이 빠르게 발전하기 시작했다. 최근에는 1천만명 이상으로 성장했고 Frost & Sullivan에 따르면 2025년까지 그 이용자 수는 3600만 명으로 연간 성장률은 16.4% 성장을 예측하고 있다. Global Market Insights는 2024 년에 전세계 자동차 공유 시장의 가치를 110억 달러로 예측한다. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
현재 주요 공유 모빌리티 시장은 서유럽과 미국이며, 전문가들은 아시아가이 분야에서 가장 빠른 성장을 경험할 것이라고 예측하고 있다. 그랩이라는 회사는 동남아 8개국 336개 도시에 각종 모빌리티 서비스를 제공하는 세계 3대 차량 공유 서비스로 성장해있다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-JE8k9F3EcVQ/XZak0CbwIyI/AAAAAAAAVeQ/OaD-0B9VDisyUC-sftmuGE9NPMqW3MKGwCLcBGAsYHQ/s1600/chart1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="406" data-original-width="669" height="388" src="https://1.bp.blogspot.com/-JE8k9F3EcVQ/XZak0CbwIyI/AAAAAAAAVeQ/OaD-0B9VDisyUC-sftmuGE9NPMqW3MKGwCLcBGAsYHQ/s640/chart1.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: #333333; font-family: "sofia pro" , "arial" , "helvetica" , sans-serif; font-size: 16px; text-align: justify;"><i>Source: Frost & Sullivan, Future of Car Sharing Market to 2025</i></span></div>
<br />
<h4>
한국은?</h4>
이건 지극히 내 생각이지만, 현재 이용 고객은 300만 정도 되는 것 같다. 디디추싱이 한국 진출을 노리고 있지만 국내 플레이어도 빠르게 움직이고 있다보니 2배는 문안하게 성장 가능하지 않을까 생각한다.<br />
<br />
B2C만 보았을 땐 규모에 경제 특성이 있어서 자연독점으로 가게 될 공산이 크고, P2P 우버 처럼 규제를 벗어나 다양한 서비스로 진화할 수 있을지는 미지수.<br />
<br />
<h4>
성공 키포인트?</h4>
카셰어링 서비스는 휴대폰에 앱을 설치하면 계정을 등록하고 차량을 렌트하며 시간과 함께 이동 거리를 측정하고 렌트 비용을 지불하는 방식으로 동작한다. 이 과정에 신뢰성과 유용성은 고객 만족에 영향을 미치는 주요 문제 중 하나다. 그 중 가장 중요해보이는 3가지는 아래와 같다:<br />
<br />
<ul>
<li>등록 절차 – 보안 상의 이유로 자동차 공유 회사는 운전 면허증, 신용 카드 번호 또는 개인 신분증 사진 등을 요구한다. 사용자를 유지하려면이 프로세스의 단순화와 신뢰성을 극대화해야한다.</li>
<li>신뢰성 – 코드 및 이미지 스캐닝, GPS, 지불. 모든 프로세스를 올바르게 처리하려면 응용 프로그램의 각 구성 요소가 매끄럽고 빠르게 실행되고 가능한 적은 배터리 리소스를 사용해야한다.</li>
<li>사용자 경험 및 디자인 – 자동차 공유는 복잡한 서비스이므로 직관적인 프로세스를 디자인하고 사용자가 앱에서 해메이지 않도록해야한다.</li>
</ul>
<div>
그 밖에 자율주행이라거나 seamless한 무언가 등은 중장기라 아직은 잘 모르겠다.</div>
<div>
<br /></div>
<div>
<h4>
결론</h4>
그냥 충분히 매력적인 서비스이고 좋은 미래 산업이라고 생각한다. 서버 판매에서 렌탈, 그리고 클라우드로 넘어온 것 처럼!<br />
<br />
이번 달 중순부터 공유 모빌리티 회사에 기술임원으로 합류 하기로 하였다. 직장생활은 충분히 한 것 같은데 아직도 직장생활은 나에게 어떤 의미인지 정의내리기 어려운 것 같다. 내가 관심을 갖고 있는 분야이다보니 그저 살아가는 현 시대와 인생을 즐기기로.</div>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com1tag:blogger.com,1999:blog-9588112.post-51763422270863559172019-10-01T20:04:00.004-07:002019-10-01T20:05:47.536-07:00인간 본성의 법칙 (책 리뷰 + 잡담)점심 먹고 서점에 들러서 집어든 책이 하나 있다. "인간 본성의 법칙", 몇 장 읽어보면서 바로 몰입되는 책. 아직 다 읽지 못해서 리뷰 하긴 뭐 하지만, 과거 내 행동들에 대한 부끄러움, 감정을 배제한 이성적 의사결정에 큰 깨달음을 얻었다.<br />
<br />
사실 표정이 순수하고 자연스럽지 못한 사람은 그 입에서 아무리 유식하고 논리 정연한 이야기가 나온다 해도 본능적으로 의심하게 되지 않나?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-f1uwQ3DKZ24/XZQMWHV4_3I/AAAAAAAAVdQ/8pmbagbsggAufk-Ww368nsvk0GNu7X4MgCLcBGAsYHQ/s1600/71085973_10219248087735934_1773929099358633984_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1440" data-original-width="1072" height="640" src="https://1.bp.blogspot.com/-f1uwQ3DKZ24/XZQMWHV4_3I/AAAAAAAAVdQ/8pmbagbsggAufk-Ww368nsvk0GNu7X4MgCLcBGAsYHQ/s640/71085973_10219248087735934_1773929099358633984_o.jpg" width="476" /></a></div>
<br />
인간의 본성을 이해하고, 나를 이해하고, 내 행동들을 조금 더 이성적으로 결정한다면 아마도 나는 더 좋은 사람이 될 수 있으리라. 마음을 비워라. 감정을 내려놓자.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com5tag:blogger.com,1999:blog-9588112.post-84913791264825367292019-07-31T05:35:00.001-07:002019-07-31T05:35:20.933-07:00무한의 세계무한 집합의 크기<sup>Cardinality</sup>, 즉 원소의 개수를 수학에서는 '농도'라고 말한다. 유한 집합의 크기는 그대로 원소의 개수 이지만, 무한 집합의 경우는 원소의 개수를 낱낱이 셈하는 것은 불가능하기 때문에 '농도'라는 말을 사용하고 히브리 문자 ℵ로 표시하고 aleph라 읽는다.<br />
<br />
자연수 전체의 개수, 즉 농도가 ℵ0인 집합은 \(\{ℵ0,ℵ1,ℵ2,…\}\) 와 같이 자연수로 번호<sup>Index</sup>를 붙일 수 있는 집합이라 하여 가부번 무한(집합)이라고 하고 \(\{ℵ_n : n ∈ ℕ\}\) 와 같다.
<br />
<br />
자연수 다음에 등장하는 것은 유리수(분수)이다. 분수는 직선 상에서 아무리 짧은 부분을 잡아도 그 속에 또 분수가 촘촘히 박혀 있다. 즉, 유리수의 집합은 조밀한 농도를 지닌다. 그러나, 분수 전체의 집합도 자연수의 집합과 1대 1 대응이 가능하며, 따라서 유리수 집합도 같은 가부번 집합이다.<br />
<br />
그런데, 0 에서 1 사이의 선분 상의 점을 나타내는 수들의 집합은 아무리 해도 1, 2, 3, ...과 같이 번호를 매길 수 없다. 실수 집합의 농도는 연속의 선분 상의 점의 개수와 같기 때문에 연속체 농도 또는 비-가부번 농도라고 부르며, ℵ1으로 나타낸다. 즉, 실수의 집합은 자연수보다 훨씬 큰 무한 집합이다.<br />
<br />
거시세계와 미시세계가 프랙탈 구조로서 연속되어 있다는 석가모니의 우주관에서 소름이 돋을수 밖에 없다! 우주의 무한 크기에 놀랄 것 없이 우리 자체가 훨씬 큰 무한일지 모르겠다.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com66tag:blogger.com,1999:blog-9588112.post-82191073761145814642019-07-21T02:33:00.003-07:002019-07-21T02:42:45.249-07:00음성 인공지능 스타트업의 기회 분석음성 인공지능 분야에서 스타트업이 생각해볼 수 있는 전략은 아마 다음과 같이 3가지 정도가 있을 것이다:<br />
<br />
<ol>
<li>독자적 Vertical 음성 인공지능 Application 구축</li>
<li>기 음성 플랫폼을 활용한 B2B2C 형태의 비지니스 구축</li>
<li>기 음성 플랫폼 생태계 내에 3<sup>rd</sup> party 서비스 구축</li>
</ol>
<br />
(1) 의 접근은 도메인 특화된 Standalone 음성 인공지능 Application을 만드는 방법이다. (2) 의 접근은 기 음성 플랫폼 비지니스 사업자에 특수 분야 기술을 제공해서 최종적으로 소비자에게 전달되는 B2B2C 형태의 사업 추진이다. 마지막으로 (3) 은 기 음성 플랫폼 내 3<sup>rd</sup> party 서비스를 개발하여 소비자에게 제공하는 방법이다. 지금부터 하나씩 사례와 함께 자세히 살펴보자.<br />
<br />
<span style="font-family: inherit; font-size: large;">1) 독자적 <b>Vertical</b> 음성 인공지능 <b>Application</b> 구축</span><br />
<br />
너무 당연한 얘기지만 스타트업이 구글이나 아마존의 범용 음성인식과 차별없는 음성 인식을 통해 경쟁하려 든다면 그것은 별로 좋은 아이디어는 아니다. 구글이나 바이두와 같은 막강한 기업 만큼의 예산과 기술을 갖추고 있지 않기 때문에 무조건 백전 백패다.<br />
<br />
그러나, 특정 산업에 특화된 문제를 발굴하고 AI를 결합해 그 문제를 해결하는 접근으로 속도를 내고 있는 Vertical AI 스타트업이 있다. 대표적으로 <a href="http://chorus.ai/">Chorus.ai</a>와 한국의 리뷰와이저(?), <a href="https://www.actionpower.kr/en/">액션파워</a> 정도가 될 것 같다.<br />
<br />
코러스의 창업자는 도메인 특화된 버티컬 엔진이 (경험적으로 퉁쳐서) 일반 범용 엔진보다 최소 15% 향상된 성능을 낼 수 있다고 한다. 국내 Vertical voice AI 회사도 만나본 적은 있지만 개인적으로 나눈 대화다 보니 특별히 언급은 생략한다.<br />
<br />
뭐 여하튼 (정량적 평가 수치는 확인할 수 없었으나) 기술적으로 따져보았을 때 명백히 narrow domain으로 접근하면 자연어 처리에 있어 그 복잡도를 낮추고 결론적으로 높은 성능을 낼 수는 있을 것이다.<br />
<br />
이 때문에 도메인 특화된 음성 인식 엔진은 당장 빠르게 우위를 점할 수 있다는 점은 분명하다.<br />
<br />
다만, 막강한 자본과 기술로 무장한 메이저 플레이어들이 데이터를 확보하는 것은 시간 문제이기 때문에, 시간이 지남에 따라 점점 더 많은 활용 사례로 확장될 것이고 장기적으로 보았을때 방어력을 구축 하는 것은 어려울 것이라고 생각한다.<br />
<br />
물론 Vertical 이라 해서 단순히 "전문용어" 같은 언어적 특성 영역 만을 바라볼 필요는 없다. 업무 몰입을 돕는 <a href="https://voxo.co/">Voxo</a>, <a href="https://agvoiceglobal.com/">Agvoice</a> 라는 스타트업도 있다.<br />
<br />
<span style="font-size: large;">2) 기 음성 플랫폼을 활용한 <b>B2B2C</b> 형태의 비지니스 구축</span><br />
<br />
아마존 에코 (echo) 를 활용해서 심장병 환자의 가정 치료 솔루션을 병원에 제공하는 회사가 하나 있다. <a href="https://cardiocube.com/">카디오큐브</a>라는 곳인데, 그들은 기 음성 플랫폼을 전략적 B2B 비지니스 고객으로 활용해서 의료기기 형태로 제품을 만들고 병원을 통해 그것이 최종 환자 (소비자) 에게 공급되도록 하는 B2B2C 형태의 비지니스를 하고 있다.<br />
<br />
AI 스피커를 따로 만들고 음성 인식 관련 기술을 모두 자체 연구 개발하는 것 대신 기 음성 스피커를 적당히 레버러징하여 비지니스를 풀어내는 것이다.<br />
<br />
언뜻 보면 굉장히 매력적인 모습으로 보이긴 하는데, 이런식으로 제품을 만들면 구글과 아마존의 플랫폼 전략에 좌지우지 되며 결국 제약에 발목을 잡힐 수 있지 않을까?<br />
<br />
또, 그들 플랫폼은 원본 오디오나 텍스트 정보에 접근하는 것을 엄격하게 제한하고 있기 때문에 서비스 품질을 고도화하거나 자체적인 데이터 경쟁력을 확보하기 어려워 장기 계획을 세우기 어렵다고 볼 수 있다.<br />
<br />
<span style="font-size: large;">3) 기 음성 플랫폼 생태계 내에 <b>3<sup>rd</sup> party</b> 서비스 구축</span><br />
<br />
거대 회사에서 음성 플랫폼을 만들자마자 역시나 빠르게 기존 성공 방정식대로 서비스 분석 통계 툴, 개발 생산성 도구, 그리고 cross-platform SDK 제공 회사들이 빠르게 쏟아져 나왔다. 대표적인 업체가 VoiceLabs, Storyline, <a href="https://www.jovo.tech/">Jovo</a> 등이 있다.<br />
<br />
이러한 3<sup>rd</sup> party 사업은 다 좋은데 그 시장이 충분히 성장한 상태인지가 중요하다. 개인적으로는 이러한 스타트업들은 선점 효과만을 보고 들어가는 약간의 도박성이 있다고 생각한다.<br />
<br />
선점 효과가 존재한다는 것은 결국 진입이 쉽다는 얘기라 빠른 시간 내 무한 경쟁 환경에 처하게 되고, (2) 접근과 같이 거대 기업의 플랫폼 전략에 운명이 좌지우지 할 수 밖에 없다.<br />
<br />
서비스 분석 통계 툴을 제공하는 VoiceLabs 경우는 <a href="https://techcrunch.com/2017/06/15/the-first-ad-network-for-alexa-skills-shuts-down-following-amazons-policy-changes/?source=post_page---------------------------">아마존의 정책 변경</a> 때문에 서비스를 종료하는 상황도 맞이했는데, 내가 보았을 땐 다분히 의도적인 대기업 횡포의 일환이라고 본다.<br />
<br />
<b><span style="font-size: large;">맺으며</span></b><br />
<br />
요즘 특히 음성 AI에 관심이 많다. (지금은 쪼깨 막연하긴 하지만) 음성이라는 것이 정보 소통과 정보 기록에 있어 중요한 인터페이스라는 점에서다. 소통이라는 것은 너무 본질적인 것이다 보니 인간사와 20년 전부터 오늘날 모든 인터넷 서비스에도 여전히 킬러 요소로 자리하고 있다.<br />
<br />
어쨌든 스타트업으로써는 (1) 의 접근이 가장 현실적이라고 생각하고 있고, 특별히 B2C 서비스로 AI startup 이 활약할 기회는 (지금 까지 내 생각엔) 크게 많지 않다고 생각하고 있다. 메모장이나 통화 기록을 받아적어주는 정도랄까? (이것들은 이미 내가 시도를 해봤고 playstore에서도 한번 받아 써볼 수 있다).<br />
<br />
그래서 B2B 사업 전략과 기회들을 간략히 한번 살펴보았고, 내릴 수 있는 결론은 3가지 모두 장단이 있어서 상황과 문제 특성과 타이밍에 의존적이며, 그에 맞는 전략을 취하는 것이 좋다.<br />
<br />
방향이 없는 아주 초기 경우에는 (1) 의 접근이 조금 좋아보인다. 문제는 도메인 지식이다.<br />
<br />
다음은 "The Secrets of Successful AI Startups. Who’s Making Money in AI?" 라는 제목의 블로그 포스트 일부 내용이다.<br />
<br />
<i>It is clear that AI startups are providing valuable point solutions to enterprises and are succeeding as they have access to (1) large and proprietary data training sets, (2) domain knowledge that gives them deep insights into the opportunities within a sector, and (3) a deep pool of talent around applied AI.
</i><br />
<br />
큰 틀에서는 동의를 하지만 내 경험상 데이터는 그렇게 중요한 문제가 아니라고 생각하고 있고, .. 그래서 가장 중요한 문제는 역시나 특정 분야 내 기회를 잡아낼 수 있는 날카로운 인사이트와 도메인 지식이 가장 중요하다고 생각하고 있다.<br />
<br />
기술력은 후행 변수다. 타겟이 명확히 없으면 트렌드 공부와 academic 수준의 쉐도우복싱 (?) 말고는 할 것이 없다.<br />
<br />
그렇다보니 AI로 돈벌어 먹고 살거라면, 세상을 살펴보고 다양한 사람들을 만나보는 것이 어쩌면 지금 가장 우리가 해야할 일이 아닌가 싶다.<br />
<br />
<br />
<b><span style="font-size: large;">References:</span></b><br />
<br />
- <a href="https://towardsdatascience.com/the-secrets-of-successful-ai-startups-whos-making-money-in-ai-part-ii-207fea92a8d5">https://towardsdatascience.com/the-secrets-of-successful-ai-startups-whos-making-money-in-ai-part-ii-207fea92a8d5</a><br />
- <a href="http://www.bradfordcross.com/blog/2017/6/13/vertical-ai-startups-solving-industry-specific-problems-by-combining-ai-and-subject-matter-expertise">http://www.bradfordcross.com/blog/2017/6/13/vertical-ai-startups-solving-industry-specific-problems-by-combining-ai-and-subject-matter-expertise</a><br />
<br />
<br />
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.Apple SD Gothic NeoI'}
span.s1 {font: 12.0px 'Helvetica Neue'}
</style>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com18tag:blogger.com,1999:blog-9588112.post-64389815449456052902019-05-27T20:58:00.000-07:002019-05-27T20:58:50.502-07:00CTC 손실 함수\(L\)을 label의 집합, \(L’\)을 공백이 포함된 label의 집합이라고 하자.
길이 T를 갖는 sequence에 대하여, 모든 가능한 paths(network output)의 집합을 \(L’^T = \pi\) 라 하자.
실제 labeling z를 갖는 input x에 대하여, 제대로 labelling이 될 확률을 최대화 하는 문제가 된다. 이후에 maximum likelihood estimation 을 이용해 최적화한다.
<br/><br/>
\(\hat\theta = arg \max_{\theta} \prod_{i=1}^N p(Z^{(i)} | X^{(i)} ; \theta)\)
<br/><br/>
output에서 얻은 labels에서 중복되는 label과 공백을 없애는 n:1 함수를 B라고 정의하자. 함수 B는 “Collapsing” operation한다고 칭한다. 예시는 다음과같다.
<br/>B(_A__AAAA_BBBCCCC) = B(A_A_BBBB_CC) = AABC
<br/><br/>
B의 역함수 B<sup>-1</sup> 가 정의 가능하며, 이 함수는 ground truth에 대하여 모든 possible paths로 map이 가능하다.
<br/>B<sup>-1</sup>(ABCC) = -A-AAA-BBBCCC, 등등등등등 (1:n 함수?형태)
<br/><br/>
역함수의 성질을 수식으로 표현하면 우측과 같다: \(\{ B(x)|x \in B^{-1}(z)\} = z \)
<br/><br/>
이제, 주어진 labelling z에 대한 가능도를 정의할 수 있으며, z로 Collapse 가능한 모든 paths가 나올 확률의 합으로 가능도를 정의할 수 있다.
<br/><br/>
\(p(Z|x ; \theta) = \sum_{\pi \in B^{-1}(z)} p(\pi | x ; \theta) \)
<br/><br/>
앞서 본 인풋x에 대해 labeling z 를 최적화 하려는 식(아래의 식) 안에 대입을 하고 합의 형태로 바꿔 minimazation 문제로 바꾸면 최종식은 다음과 같다.
<br/><br/>
\(\hat\theta = arg \max_{\theta} \sum_{i=1}^Nlog [ \sum_{\pi \in B^{-1}(z^{(i)})} p(\pi | x^{(i)} ; \theta) ] \)
<script type="text/javascript">MathJax.Hub.Queue(["Typeset",MathJax.Hub]);</script>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com31tag:blogger.com,1999:blog-9588112.post-43292335685084344752018-09-08T07:30:00.001-07:002018-09-08T07:30:35.908-07:00How socket.io-redis adapter works? 레디스 어댑터 동작원리<div class="separator" style="clear: both;">
보통 실시간 메시징 처리에 socket.io와 redis를 많이 사용하는데, 그 동작 메커니즘이 자세히 소개된 글을 찾기 어려웠다. 이유는 간단한데, 소스코드가 그냥 간단해서 글로 쓰고 자시고 건더기도 없어 그런듯. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
기본적으로 socket.io는 Server, Namespace, Room, 그리고 Socket으로 구성되어있고 멀티 노드를 위해 pluggable 디자인 방식으로 Adapter라는 것이 존재한다. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="" style="clear: both;">
Default In-Memory 방식은 배열에 socket과 room 정보를 저장하기 때문에 웹 서버에 붙어있는 clients 외 에는 알 길이 없다. 이때 redis adapter를 사용하면 다음과 같이 동작하는데, sender가 원격에서 넘어왔다면 그냥 내 로컬 clients에게 deliver하는 것으로 종료하고 그렇지 않으면, 다른 노드에게 publish하여 메시지를 전달한다. </div>
<div class="separator" style="clear: both; text-align: center;">
<br /><a href="https://2.bp.blogspot.com/-FwJh08oYjS8/W5PaVuqatQI/AAAAAAAARn8/HybRxPnzNbQGmS9zLLrrEvM_LXr62TQegCLcBGAs/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%2B2018-09-08%2B%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE%2B5.18.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="960" height="375" src="https://2.bp.blogspot.com/-FwJh08oYjS8/W5PaVuqatQI/AAAAAAAARn8/HybRxPnzNbQGmS9zLLrrEvM_LXr62TQegCLcBGAs/s400/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%2B2018-09-08%2B%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE%2B5.18.46.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
분산 인프라 치고는 놀랍게도 Javascript 몇 줄 안되는 소스코드로 node, socket.io, 그리고 redis가 동작한다. 좀 이해하기 쉽게 도식화하면 다음과 같다:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-ZCTHL35tpck/W5Pckp3PKiI/AAAAAAAARoM/mmhg2w-SejI382lMIfKCB8h09JghQyHSQCLcBGAs/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%2B2018-09-08%2B%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE%2B11.25.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="1158" height="312" src="https://3.bp.blogspot.com/-ZCTHL35tpck/W5Pckp3PKiI/AAAAAAAARoM/mmhg2w-SejI382lMIfKCB8h09JghQyHSQCLcBGAs/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA%2B2018-09-08%2B%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE%2B11.25.20.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com24tag:blogger.com,1999:blog-9588112.post-8375757118060045982018-06-23T20:33:00.001-07:002018-06-23T20:33:11.430-07:00딥 러닝의 블랙 박스 열어보기Opening the black box of Deep Neural Networks
via Information<br />
- https://arxiv.org/pdf/1703.00810.pdf<br />
<br />
지금까지 딥 러닝은 어떻게 동작하는지 이해할 수 없다고 믿어져왔다. 그러나, 천재들은 그 근본 원리를 이해하려고 노력하고 있지.<br />
<br />
이 논문은 SGD가 무슨 역할을 하는지에 대한 해석으로, 이들은 SGD가 drift와 diffusion단계로 구분된다고 설명한다.<br />
<br />
첫 drift 단계에서는 multidimensional space를 탐험하고, 수렴을 시작하면 diffusion 단계로 접어들어 (첨부 그림에서 점선 오른쪽에 해당) 굉장히 느려지기 시작하며 chaotic 한 단계로 들어가는데 이게 바로 네트워크가 압축하는 법을 배우는 과정이라는 것이다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-nXoh5PSHhUk/Wy8NXUWkutI/AAAAAAAAQbs/NZ3S7O6rkP8aqJdiRQseItG9ZlBejwVOgCLcBGAs/s1600/1_NTN5YaJGIis3DEAm_LAlRg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="344" data-original-width="493" height="278" src="https://2.bp.blogspot.com/-nXoh5PSHhUk/Wy8NXUWkutI/AAAAAAAAQbs/NZ3S7O6rkP8aqJdiRQseItG9ZlBejwVOgCLcBGAs/s400/1_NTN5YaJGIis3DEAm_LAlRg.png" width="400" /></a></div>
<br />
<br />
SGD의 무질서도는 local minima에 빠지지 않고 더 나은 방향으로 수렴 할 가능성을 제공 할 뿐만 아니라, diffusion 단계에서 매우 효과적인 internal representations(?)를 생성하는데 자기가 볼쩍에 다소 과한것으로 보이며, 자기들의 IB iterations with stochastic relaxation methods로 DNN 학습 방법을 개선할 수 있을거라고 얘기한다.<br />
<br />
제프리 힌트 교수가 지대한 관심과 찬사를 보냈기에 많은 관심을 받고 있는 내용인데, 딥 러닝 대가들의 근본 원리와 최적화 이론에 대한 얘기라, 나는 훔쳐만 봤지 뭔소리인지는 정확히는 이해하기 어렵다.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com9tag:blogger.com,1999:blog-9588112.post-1869463869472014122018-06-16T05:47:00.000-07:002018-06-16T05:50:27.558-07:00THE HUNT (JAGTEN)<br />
<a class="image" href="https://en.wikipedia.org/wiki/File:The_Hunt_(2012_film).jpg" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; clear: left; color: #0b0080; float: left; font-family: sans-serif; font-size: 12.6px; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img alt="The Hunt (2012 film).jpg" class="thumbborder" data-file-height="382" data-file-width="260" height="323" src="https://upload.wikimedia.org/wikipedia/en/thumb/4/44/The_Hunt_%282012_film%29.jpg/220px-The_Hunt_%282012_film%29.jpg" srcset="//upload.wikimedia.org/wikipedia/en/4/44/The_Hunt_%282012_film%29.jpg 1.5x" style="border: 1px solid rgb(234, 236, 240); vertical-align: middle;" width="220" /></a>추측으로 만들어진 억측 또는 소문을 ‘카더라 통신’이라고 한다. ‘누가 언제 어쨌다 카더라.’로 시작되는 이야기. 믿거나 말거나 장난처럼 흘린 말이 시간이 지나면서 엉뚱한 방향으로 튀어 종잡을 수 없게 된다. 급기야 열기구처럼 둥둥 떠다니며 온갖 티를 묻히기도 하는데, 그 볼썽사나움이란 형언하기조차 어렵다.<br />
<div>
<br /></div>
<div>
요즈음에는 ‘넷카시즘’이 횡행한다. 인터넷이나 SNS 공간에서 누리꾼 다수가 특정 개인을 공격하는 것 말이다. 마녀사냥이라고 해야 할지. 광속도로 자행되는 돌팔매질 앞에서 당하는 사람은 속수무책이다.<br />
<br />
둘의 공통점은 불특정 다수가 특정 개인을 잡도리한다는 것이다. 자신과 이해관계가 없음에도, 심지어 상대를 잘 알지 못함에도 덩달아 가담하여 사태를 악화시킨다. </div>
<div>
<br /></div>
<div>
‘거짓 동의 효과’라는 게 있다. ‘다른 사람이 나와 같을 것으로 생각하는 경향으로 그들에게 자신을 투영하는 현상.’을 말하는 것인데, 집단적 왜곡으로 치달을 때 그 파괴력은 상상을 초월한다. 속된 표현으로 사람 잡을 일이다. </div>
<div>
<br /></div>
<div>
잠시 우리 직장으로 고개를 돌려보자. 지금 우리는 어느 동료직원에게 돌을 던지고 있지 않은가. 어떤가. 부지불식중에 확인되지 않은 남 이야기를 하고 있지 않느냐 말이다.<br />
<br />
이러한 상황에 내몰린다면 어떻게 처신해야할까? 편히 앉아 영화 한편 때리셔라. The Hunt.</div>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com2tag:blogger.com,1999:blog-9588112.post-63429989993238994492018-06-09T01:24:00.001-07:002018-06-23T00:13:05.976-07:00페이스북, AI의 직관적 물리학 체계 실험아들을 데리고 탄천을 산책 하면서 우연히 돌계단을 오르며 생각했다. 표면이 고르지 않은 돌계단에 나는 내딛을 위치를 어떻게 결정하고 있는가?<br />
<br />
우리의 뇌는 직관적 지름길과 어림법<sup>heuristic</sup>을 많이 가지고 있다. 예를 들면, 움직이는 물체의 궤적을 예측할 수 있는 "직관적 물리학 체계"를 타고 난다. 연구에 따르면, 신생아도 자신에게 다가오는 물체가 충돌 궤적을 따르느냐 아니냐에 따라 상이한 반응을 보인다.<br />
<br />
우리는 '던져진 물체와 '낙하하는' 물체를 직관적으로 구분한다. 던져진 물체에 대해서는 물체에 가해진 힘과 중력 두 가지를 고려하지만 낙하하는 물체에 대해서는 중력만 고려되기 때문에 그 물체는 곧게 하강할 것이라 예측하는 것이다.<br />
<br />
완전한 3차원 재구성을 하지 않아도 단순한 사진 장면에 대해 우리는 물리적으로 이해할 수 있고, 이것을 직관적 물리학 체계라고 할 수 있다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-gA_rU4lssNE/Wy3y9ymqOJI/AAAAAAAAQaQ/p7LUYEUmJPogV1-XYtZEIy3_wlYQAsx0wCLcBGAs/s1600/858dca772ddde120c9ff1aa17f141085.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1000" height="356" src="https://3.bp.blogspot.com/-gA_rU4lssNE/Wy3y9ymqOJI/AAAAAAAAQaQ/p7LUYEUmJPogV1-XYtZEIy3_wlYQAsx0wCLcBGAs/s640/858dca772ddde120c9ff1aa17f141085.jpg" width="640" /></a></div>
<br />
최근 INRIA와 Facebook AI 팀의 연구원들은 AI가 이러한 직관적 물리학을 얼마나 이해하는지 진단하는 평가 프레임 워크를 개발했다. (참고: <a href="https://arxiv.org/pdf/1803.07616.pdf">IntPhys: A Framework and Benchmark for Visual Intuitive Physics Reasoning</a>)<br />
<br />
만일 AI가 이러한 직관적 물리학 체계를 얻게 된다면 바둑 두는 정도가 아니라 생각된다. 씹~소오름.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com1tag:blogger.com,1999:blog-9588112.post-56603724934598994062018-06-03T17:19:00.002-07:002018-06-03T17:28:57.956-07:00Introducing Rebase: a Firebase like backend service based on Node.js, Redis, and HBase삼성전자 재직시절 (아마도 2 ~ 3년 전) 대외 기고 승인까지 다 받아놓고 게재하지 않았던 글을 이제서야 올려본다. 지금 다시 보니 감회가 새롭네.<br />
<br />
<h2>
Introducing Rebase: a Firebase like backend service based on Node.js, Redis, and HBase </h2>
<span style="font-size: x-small;">Guest post written by Edward J. Yoon and Sungwon Han, Senior Software Engineers, Samsung Electronics.</span><br />
<br />
Event-driven applications that handle user actions, sensor outputs, or messages from other applications have become increasingly popular in recent years, in part as a result of the proliferation of smart devices and the Internet of Things. With this, the real-time databases (like Google's Firebase [1] and RethinkDB [2]) are considered as important technologies for supporting these non-traditional applications and workloads.
In this guest post, we introduce Rebase, a Firebase-like backend service that allows you to store and synchronize data in online/offline modes, push notifications and provides analytics (in near future) for mobile platforms.
Rebase was first deployed to run on Amazon AWS. However due to performance and cost reasons, we soon migrated it to run on Joyent’s Triton Cloud. We share performance benchmarks for Rebase on Joyent Triton vs. Amazon AWS, which served as our key decision metric.<br />
<h3>
Rebase </h3>
Recently, we developed a container-based real-time database for Samsung IoT applications, called Rebase. It uses event-driven model to notify changes among clients, stores data as JSON objects in a K/V databases. It also provides easy-to-use RESTful APIs and client libraries that accessible to cross-platforms such as iOS and Android in form of SDKs. With Rebase, developers can focus on core functionality and not have to worry about the infrastructure running the backend services.<br />
<br />
Below is a reference architecture for Rebase. It has the following key components:<br />
<br />
<div style="text-align: center;">
<span id="docs-internal-guid-7d20e72c-c82d-f0c1-06aa-15ae512f8e04"><span style="font-family: "arial"; font-size: 10pt; vertical-align: baseline; white-space: pre-wrap;"><img height="247" src="https://lh3.googleusercontent.com/CtERL6-pSUSMJEVZX_R2Jdz-KKnlLXoxR6qcOzGDG3p-aJEPTIeSDJDqih1SIdoVAJdSJnW8h-_TaXVjAy8aNxjuP1KWaAPrEkbOUW43WsXydI2lRO6qdBhOf4JTyODMtKDHreyV" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="566" /></span></span></div>
<div style="text-align: center;">
Rebase backend container stack </div>
<br />
<b>NGINX, Node.js, and Standalone Redis </b><br />
<br />
We adopted NginX, Node.js, and Redis as a backend servers. Node.js is a JavaScript runtime environment that processes incoming requests asynchronously in a loop, called event loop. It has an event-driven and non-blocking I/O model, thus it allows handling large throughput of data and building scalable applications. NginX is used as a load balancer, and the standalone Redis is used for message queueing and asynchronous messaging.<br />
<br />
<b>Redis and HBase Cluster </b><br />
<br />
For the persistent storage, we reviewed NoSQLs and K/V stores such as Redis, HBase, and MongoDB. MongoDB isn't suitable for the time-series workloads. Redis is very fast but it has limited scalability and persistency capabilities. HBase is column-oriented K/V store that allows horizontal scalability, and allows to store not only JSON object itself but also parsed columns for fast columnar scan. So, we decided to use the sharded Redis cluster as cache storage, and the HBase as persistent storage.<br />
<br />
<b>Programming Interface </b><br />
<br />
Rebase's client SDK is very similar to the Google's Firebase. It provides basic CRUD operations and stream subscriptions APIs. For example, chatting app synchronization can be written like the following:<br />
<pre>var setMessage = function(data) {
var val = data.val();
this.displayMessage(data.key, val.name, val.text);
}.bind(this);
// Loads the last 3 messages and listen for new ones.
this.messages.limitToLast(3).on('child_added', setMessage);</pre>
<h3>
Joyent Triton vs. AWS </h3>
<b>Cost</b><br />
<br />
In the early days of Rebase, we mainly used Amazon EC2 instances and ECS service as a container pools for Rebase backend service. AWS served our needs well, when our users and traffic workloads were small. However as we started scaling out, it quickly turned into a very expensive option for our long term needs.<br />
<br />
<b>Server Density</b><br />
<br />
Additionally, AWS runs containers on VMs, which adds unnecessary overhead to the compute nodes. Also if you end up running Kubernetes to manage containers, on VMs running on EC2, the layers of abstraction keep adding flab and reduce efficiency of the compute resources. We tried Joyent and were impressed with it’s containers on bare-metal service. No VMs or abstraction layers to go through.<br />
<br />
<b>Performance</b><br />
<br />
Moving to bare metal with Joyent's Triton service [3], we were able to get significant performance improvements as following throughput graph illustrates. For Read operations, we were able to increase throughput by 3~5% while keeping latency under 1 second. For Write operations, we were able to increase throughput by 63% at the same latency of under 1 second.
<br />
<br />
<b>Deployment Time</b><br />
<br />
We were able to reduce the deployment time drastically (5 minutes to 1 minute) for new cluster of rebase backend service using Triton’s optimized container provisioning.<br />
<h3>
State of the Project </h3>
We are still in the early stages and the code isn't meant for production usage yet. The auto-scaling with minimal downtime is challenging. An elastic solution that allows auto scaling up and down or non-stop migrating service is our next goal. Container Pilot and the auto pilot pattern look like some of the right tools to try.<br />
<br />
We also plan to open source this project once we've made a few more refinements to it, so that we could tailor it and contribute back to the wider community. We will also be looking to add contributors, so keep a lookout on here for updates!
<br />
<br />
<h4>
References</h4>
1. "Google Firebase". https://firebase.google.com/<br />
2. "RethinkDB". http://www.rethinkdb.com/<br />
3. "Joyent Triton". https://www.joyent.com/tritonEdward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-15092790607905081212018-04-26T06:06:00.001-07:002018-04-26T06:06:40.009-07:00Holonomic brain theory and Capsule NetworkHinton's CapsNet explains about entity's pose, lighting and deformation, instead of shape feature and pattern. While I reading Hinton's idea, I thought about Holonomic brain theory.<br />
<br />
<b><i>"If a holographic image, containing the image of an apple, is cut in half and then illuminated by a laser, each half will contain the overall image of the apple! Even if the halves are sliced again and again, from each little piece of the film can be restored the image of a whole apple (although the image will become less clear with the reduction of the parts)."</i></b><br />
<b><i><br /></i></b>
Our brain is also very similar. We don't store images in brain, we store some transformed code. We don't lose our memory, it just fade out.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com1tag:blogger.com,1999:blog-9588112.post-56182402494211445072018-04-15T03:48:00.004-07:002018-04-26T04:51:13.611-07:00Gear Watchface Designer on Mac OS X재직 시절에 (싸게) 구매했던 기어 S3를 쓰다보면 watchface 권태기를 3개월마다 겪게 되는데, 그럴때마다 구매한게 지금 거진 20개 가까이 된다. 그런데 내 마음에 썩 들지도 않고 얼마 안하지만 아깝기도 해서 직접 만들어보기로 했다.<br />
<br />
디자이너들을 위한 개발 도구는 Gear Watchface Designer를 검색해서 설치하면 되는데, Java 버전에 따라 키보드와 마우스가 먹통이 되는 현상이 있다. Java다 보니 뭐 맥북이든 윈도우즈든 상관은 없고, 최신버전 JDK에서는 동작하지 않고 반드시 JDK 8u151 [1] 버전을 설치해야 한다. 이것 때문에 개삽...<br />
<br />
아래는 내가 지금 만들고 있는 watchface 인데, free 이미지를 활용해서 Roman 스타일로 내 맘에 꼭 든다 ㅋ 돈 받고 팔아봐야지~<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8rABvO2tEMI/WuG9ByRk4qI/AAAAAAAAPec/Vml3Ntm0PB4r7F2YlOYbXo2QcpXvpRisQCLcBGAs/s1600/IconImage_20180423011631550.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://1.bp.blogspot.com/-8rABvO2tEMI/WuG9ByRk4qI/AAAAAAAAPec/Vml3Ntm0PB4r7F2YlOYbXo2QcpXvpRisQCLcBGAs/s320/IconImage_20180423011631550.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<i>Elegant Roman Javik 검색하면 나옴~</i></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
[1]. JDK 8u151 버전 설치 링크: <a href="http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html?printOnly=1">http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html?printOnly=1</a><br />
<div>
<br /></div>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-56725124380361404762018-04-01T23:31:00.001-07:002018-04-01T23:40:28.352-07:00Storm vs. Spark Streaming: 내부 메커니즘의 차이점트렌드 면에서는 기계학습에 밀린 것 같지만, 실시간 처리 또는 스트리밍 처리는 대단히 중요한 기술이다. 오픈소스로 존재하는 Storm과 Spark을 한번 비교해보자. 물론 솔루션 선택은 자유이고, 상황에 맞는 것이 바로 최적의 솔루션이다.<br />
<br />
<b>1. Task Prallel vs. Data Parallel</b><br />
<br />
계산 프로그래밍 모델에서부터 느낄 수 있는 가장 뚜렷한 차이는 먼저, Storm은 Task Parallelism이고 Spark Streaming은 Data Parallelism이다. 개인적으로는 보다 완성도 높은 시스템을 구현할 수 있는 Storm의 계산 그래프 구조를 선호하지만 코드의 복잡도 면에서는 Spark이 유리할 수 있다.<br />
<br />
<b>2. Streaming vs. Micro-batches</b><br />
<br />
Spark streaming의 경우는 엄밀히 말하면 실시간 처리보다는 작은 단위의 배치 연속이라고 할 수 있다. Storm은 전형적인 event-driven record at a time processing model로써 살아있는 데이터를 처리한다고 하면, Spark은 휴면 상태로 넘어간 데이터를 처리한다. 때문에 Latency에서 차이가 발생하는데 Storm은 subsecond, Spark의 경우에는 사용자 임의지정 few seconds가 된다.<br />
<br />
여기에서 중대한 차이점이 발생하는데, Storm의 경우에는 데이터 유실이 없어야 할 때 (no data loss), Spark은 중복 연산이 없어야할 때 (exactly once) 선택하는 것이 좋다.<br />
<br />
한편, Storm Trident는 Micro-batches 스타일도 가능하다고 한다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8TJt0kUBib4/WsHQDDYY3oI/AAAAAAAAPUU/k770JvsgWB4oAnA2ZGdSRqlx4NF7Fg3xACLcBGAs/s1600/microbatching-1024x651.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="651" data-original-width="1024" height="253" src="https://1.bp.blogspot.com/-8TJt0kUBib4/WsHQDDYY3oI/AAAAAAAAPUU/k770JvsgWB4oAnA2ZGdSRqlx4NF7Fg3xACLcBGAs/s400/microbatching-1024x651.png" width="400" /></a></div>
<br />
<br />
<b>3. Stateless vs. Stateful</b><br />
<br />
앞서 소개한대로 Storm은 매 레코드 별로 처리하기 때문에 State을 유지하지 않기 때문에 장애 복구 메커니즘이 Spark보다 복잡하고 re-launching 시간이 더 걸릴 것이다. Stateless vs. Stateful는 (뭔가 더 있을 것 같지만) 장애 복구 외의 차이점은 전혀 없다.<br />
<br />
<b>4. Integration with Batch processing</b><br />
<br />
긴말 필요없이 당연히 Spark이 유리하겠다.<br />
<br />
여기까지 알아봤고 과연 무엇이 최상의 솔루션인가? 내 생각엔 Storm이 조금 우수하다 판단한다. 물론 최적의 솔루션은 당신 상황에 맞아야 하겠다.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-23304650771170865522018-03-28T20:20:00.002-07:002018-03-29T05:04:23.754-07:00Belief Propagation 알고리즘한 때, 병렬 그래프 연산과 알고리즘에 심취한 적이 있다. 그중에 신뢰 전파(Belief Propagation) 알고리즘에 대해 적어본다. 이 알고리즘은 Graphical model에서 inference problem의 근사해를 추정하는 기법으로, Graph 상에 관측된 특정한 확률변수의 분포가 주어졌을 때, 직간접적으로 영향 받는 모든 관측되지 않은 확률 변수의 Marginal distribution을 추정하는 기법이다.<br />
<br />
즉, 아래와 같은 Poly Tree 구조 안에 C 노드와 E 노드가 Evidence가 주어졌을 때, \( P(B|C,E) = ? \)<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-0tPKHr18Qdw/WrxaYrA2A5I/AAAAAAAAPTk/btybcXJ45wwrNCHfHST8JQuomHcBHKGSwCLcBGAs/s1600/tree.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="490" data-original-width="544" height="288" src="https://4.bp.blogspot.com/-0tPKHr18Qdw/WrxaYrA2A5I/AAAAAAAAPTk/btybcXJ45wwrNCHfHST8JQuomHcBHKGSwCLcBGAs/s320/tree.png" width="320" /></a></div>
<br />
<br />
알고리즘은 각 노드 간 Down or Upward Message Passing과 Data Fusion 단계를 거쳐 각 노드의 확률 분포를 추정하기 때문에 병렬 연산을 위해서 Bulk Synchronous Parallel 모델이 대단히 적합하다 할 수 있다.<br />
<br />
문득, Google의 DistBelief는 이러한 분산 베이지안 네트워크의 메시지 전달 방식이라 지어진게 아닌가 싶다. 그나저나 요즘의 나는 트리 탐색 구현 정도나 할 수 있을까 모르겠네?Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com1tag:blogger.com,1999:blog-9588112.post-91323112258720738552018-03-27T07:53:00.004-07:002021-01-06T19:19:38.504-08:00딥 러닝의 비밀을 파헤치는 새로운 이론<a href="https://1.bp.blogspot.com/-6YVddgxLR84/WrpTTEWmsoI/AAAAAAAAPTE/wESetNKgN_A81lnP_u6JJsraH8tRzx9JgCLcBGAs/s1600/Naftali-Tishby_LR.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="386" data-original-width="578" height="214" src="https://1.bp.blogspot.com/-6YVddgxLR84/WrpTTEWmsoI/AAAAAAAAPTE/wESetNKgN_A81lnP_u6JJsraH8tRzx9JgCLcBGAs/s320/Naftali-Tishby_LR.jpg" width="320" /></a>예루살렘 히브리 대학 (Hebrew University of Jerusalem)의 컴퓨터 과학자이자 물리학 교수인 티쉬비(Naftali Tishby)가 작년 베를린의 한 컨퍼런스에서 딥 러닝이 어떻게 작동 하는지를 설명하는 새로운 이론을 제시했다.<br />
<br />
"deep learning is an information bottleneck procedure that compresses noisy data as much as possible while preserving information about what the data represent."<br />
<br />
딥 러닝이란, 데이터의 노이즈는 줄이고 그것이 무엇을 표현 하는지에 대한 주요 정보만 남기는 정보 병목 (Information bottleneck) 절차라는 것이다.<br />
<br />
정보 병목 기법 (Information bottleneck method) 은 두 랜덤변수의 결합확률분포가 주어진 경우, 두 변수 간의 상호 정보량을 최대한 보존하면서 한 변수를
압축하는 기법이다 (위키 참고 [1]).<br />
<br />
위키에 Information theory of deep learning 섹션은 정리되다 말았지만, X가 실제 개 사진의 픽셀같은 복잡한 대량의 데이터 셋이고, Y가 “개”와 같이 그 데이터를 표현하는 단순한 변수라 가정해보자. 딥 러닝은 즉, Y의 정보를 최대한으로 보유하고 있는 X 의 축약된 표현을 구함으로써 일반화라는 목표에 도달하는 과정이라는 것이다.<br />
<br />
내가 이 내용에 관심을 갖게 된 이유는, 딥 러닝 대부인 힌튼 교수께서 친히 티쉬비의 연구 결과에 찬사를 보냈다고 한다.<br />
<br />
“I have to listen to it another 10,000 times to really understand it, but it's very rare nowadays to hear a talk with a really original idea in it that may be the answer to a really major puzzle.”<br />
<br />
한편으로 또한 재밌는 것은, 티쉬비 교수 인터뷰에 따르면 딥 러닝이 잘 할 수 있는 것과 못하는 것의 한계는 명백 해진다. 세부적인걸 포기하기 때문에 큰 수 곱셈이나 암호 코드 박살 내는건 잘 해내지 못할 거라고 한다 ㅋ.<br />
<br />
우리 인간은 보고싶은 것만 본다. 세계로부터 전달되는 엄청난 정보의 대부분을 포기하고 정말로 보고 싶은 것만 보고 있는지 모르겠다.<br />
<br />
1. https://en.wikipedia.org/wiki/Information_bottleneck_method
<br/><br/>
<div class="wrap_item item_type_opengraph" data-app="{"type":"opengraph","openGraphData":{"title":"The Red : 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술 By 카카오페이지 기술전략이사 윤","url":"https://www.fastcampus.co.kr/dev_red_yjs","canonicalUrl":"https://www.fastcampus.co.kr/dev_red_yjs","image":"https://img1.daumcdn.net/thumb/C400x400/?fname\u003dhttps://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202012/185936-263/active-img-thered-b--2-.png","description":"당신의 인터넷 서비스는 안정적이고 확장성 있게 설계되어 있습니까? 아파치 하마 프로젝트 의장 활동, GSoC 멘토링 경험과 7개의 기업을 거치며 쌓은 노하우와 인사이트를 바탕으로, 4천만 MAU도 "}}" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; cursor: pointer; font-family: "Noto Sans DemiLight", "Malgun Gothic"; margin: 13px 0px 0px -567.5px; min-width: 940px; padding: 0px; position: relative; text-rendering: inherit; width: 1835px;"><a class="inner_wrap #opengraph" href="https://www.fastcampus.co.kr/dev_red_yjs" style="border: 1px solid rgb(221, 221, 221); color: #333333; cursor: pointer; display: block; height: 178px; margin: 0px auto; overflow: hidden; position: relative; text-decoration-line: none; width: 698px;" target="_blank"><div class="inner_wrap_text" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; float: left; margin: 0px; padding: 26px 29px 30px 30px; text-rendering: inherit; width: 458px;"><span class="title" style="display: block; font-size: 20px; line-height: 26px; max-height: 54px; overflow: hidden;"><br class="Apple-interchange-newline" />The Red : 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술 By 카카오페이지 기술전략이사 윤</span><p class="desc" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; color: #959595; font-size: 12px; height: 38px; margin: 0px; overflow: hidden; padding: 3px 0px 0px; text-rendering: inherit;">당신의 인터넷 서비스는 안정적이고 확장성 있게 설계되어 있습니까? 아파치 하마 프로젝트 의장 활동, GSoC 멘토링 경험과 7개의 기업을 거치며 쌓은 노하우와 인사이트를 바탕으로, 4천만 MAU도</p><p class="url" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; bottom: 28px; color: #959595; font-size: 11px; margin: 0px; padding: 0px; position: absolute; text-rendering: inherit;">www.fastcampus.co.kr</p></div><div class="inner_wrap_og_image" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; background-image: url("https://img1.daumcdn.net/thumb/C400x400/?fname=https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202012/185936-263/active-img-thered-b--2-.png"); background-position: 50% 50%; background-size: cover; border-left: 1px solid rgb(217, 217, 217); float: right; height: 178px; margin: 0px; overflow: hidden; padding: 0px; text-rendering: inherit; width: 178px;"> </div></a></div><p class="wrap_item item_type_text" data-app="{"type":"text","data":[{"type":"br"}]}" style="-webkit-font-smoothing: antialiased; backface-visibility: hidden; font-family: "Noto Sans DemiLight", "Malgun Gothic"; font-size: 11pt; letter-spacing: 0.8px; line-height: 22pt; margin: 13px auto 0px; min-width: auto; padding: 0px; text-rendering: inherit; width: auto;"><br style="background-color: white; color: #333333; font-size: 14.6667px; letter-spacing: 0.8px;" /></p>Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-25658270575317822652018-03-19T03:21:00.002-07:002018-03-19T03:21:52.359-07:00에이전트 오브 쉴드 엉뚱 짤막 후기전형적인 미드 중 하나로 .. 뭔가 스파이 비밀조직에서 팀을 이루고 문제를 해결해나가는 스토리다.
한국은 누구랑 친해? 또는 누구랑 놀지마, 친하게 지내, 그리고 경쟁적이고 아파트 평수로 파를 가르는 문화가 있는데 아이를 키우는 입장에서 정말 부럽다는 생각이 든다.
다양성을 인정하고 팀으로 문제를 해결하는 환경으로 바뀌어나갔으면 좋겠어.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-27395504384688618952018-03-15T00:16:00.000-07:002018-03-15T00:34:28.633-07:00딥 러닝으로 다시 태어난 "하드코어 폐인"<table align="center" bgcolor="#000000" style="width: 100%;"><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="526" src="https://3.bp.blogspot.com/-cdghK-mLRP0/Wqocz88or6I/AAAAAAAAPRw/o4jidgSc2qUO-MfFmyKI3WK2yDL3VWppgCLcBGAs/s640/title.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="520" src="https://2.bp.blogspot.com/-s0cpublmljw/WqoJLAHnuwI/AAAAAAAAPNE/A8YKEXn2CdcefH54YjHG1Q1xz0YrHbd7ACLcBGAs/s640/CY3GU5EX9RKOUTKLVCYXC7A7NQ5L4XVL_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="758" src="https://1.bp.blogspot.com/-JqXL0u08BXw/WqoJMcPCLCI/AAAAAAAAPNY/9mtigu1w474xstcU4hZGQO9u9ceBzwFJQCLcBGAs/s640/UP03EXLO82VGTEKE6TPECUKAKLTSTD3C_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="758" src="https://4.bp.blogspot.com/-cNlpIRo1MZc/WqoJNA7pD1I/AAAAAAAAPNg/htZyq-39d9YhkuPk0zwg_acp8DWoOGPFACLcBGAs/s640/Y32LH7T44AG1JSMOEKCJ6QR58AAX39EJ_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="758" src="https://4.bp.blogspot.com/-TO8VwEYUQk0/WqoJMxOaaJI/AAAAAAAAPNc/w7fDDPV9sMAxIHI824Am4UrHBUhWGAl7ACLcBGAs/s640/UPYDLMMJP31SS1WBY10JNHIOEILVGY5I_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="758" src="https://1.bp.blogspot.com/-ZmL3oQ2Ar2M/WqoJMO8qFfI/AAAAAAAAPNU/W2iV41DVb38WbwU4o5tLRrpuXSvyS4bmQCLcBGAs/s640/QQBQQ4PUK322I2AI51PEX5BQ1VJRDJUN_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="825" src="https://3.bp.blogspot.com/-rMsAR4E0sv4/WqoJMFU-g0I/AAAAAAAAPNQ/Ww19f8Xgodo2s9AAv3LOn-8jVA2X22RhwCLcBGAs/s640/MP475W6V3MOJI5HOEUKJV1I81REUOK8X_0.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="957" src="https://2.bp.blogspot.com/-JVjiB8jcQxA/WqoJLFY4WMI/AAAAAAAAPNI/c6aCWTQ3o60G7uX8egL25FS9qsEnxQoeQCLcBGAs/s640/CIE6VU2PMR8KA02AKJL133ABHWOJ9434_0.jpg" width="520" /></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="457" data-original-width="1600" src="https://1.bp.blogspot.com/-TJP4RugCYuI/WqoJLLH1DWI/AAAAAAAAPNM/SbKLYsozK_cGV6LMKsmhlWQFDvLqz5l0QCLcBGAs/s640/J7CCV4IMSO52JTFF50DSIMSHQRQQDS9W_0.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="860" src="https://4.bp.blogspot.com/-wfCarBI_M4A/WqoR4rc2NZI/AAAAAAAAPPM/wcpg0LiMpIgPoDBYav_WKZVNsVGQP8joQCLcBGAs/s640/9.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="898" src="https://4.bp.blogspot.com/-5UlmjFuRb9k/WqoRu8ujeYI/AAAAAAAAPN4/khpwQnvpizcPnSc3ptwgpyK2SZvlNRA0gCLcBGAs/s640/10.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="787" src="https://4.bp.blogspot.com/-nv81qBWc0XI/WqoRvFQlovI/AAAAAAAAPOA/B_ejdyhvmUQX2APzGGyzlKoM82pGqRh1wCLcBGAs/s640/11.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="747" src="https://4.bp.blogspot.com/-jFwbR0y1LRg/WqoRu7wHNFI/AAAAAAAAPN8/LXHiAceZt5kj_NvlbQ-UBThIkSZZ8NDtACLcBGAs/s640/12.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="656" src="https://3.bp.blogspot.com/-vd5m6yeJwsw/WqoRvnvTp7I/AAAAAAAAPOE/BRZWB6Pty00R_TfZMDMOGFAEWCDm-iR4QCLcBGAs/s640/13.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="926" src="https://3.bp.blogspot.com/-p35jNqV3mYQ/WqoRv5c5ukI/AAAAAAAAPOI/lrGYc-tWPhUFdzCKljJ6cXmQG8q4w-siwCLcBGAs/s640/14.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="597" src="https://2.bp.blogspot.com/-CIZNa5yRIvA/WqoR3q-C-DI/AAAAAAAAPPI/LHj1LuBmBfcU17OoFQtpF3bxprF6TWDTACLcBGAs/s640/15.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="742" src="https://1.bp.blogspot.com/-EV66T9eVdi8/WqoRwihj8CI/AAAAAAAAPOQ/iudWgVeR_cAlejdXyCRxNxAZnVdYGOpaQCLcBGAs/s640/16.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="527" src="https://3.bp.blogspot.com/-D3Oh036WIwM/WqoRwoQ2sFI/AAAAAAAAPOU/b9wU-bF6twcdYDlXNJB0VsLgUqPZSCRfACLcBGAs/s640/17.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="819" src="https://1.bp.blogspot.com/-Nz0XdWjOplw/WqoRxaqg1PI/AAAAAAAAPOY/9Q7hwftRbnc3etO0aaaWZv__w-v8UuJ6gCLcBGAs/s640/18.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="611" src="https://2.bp.blogspot.com/-o9Zo4hGSawo/WqoRxlbmLWI/AAAAAAAAPOc/RpkMUZezQ6Y2niAVMGH9M7ublwzNQNhiACLcBGAs/s640/19.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="723" src="https://3.bp.blogspot.com/-rJCCnmhQsq4/WqoRyfIn62I/AAAAAAAAPOg/u0wE3Yd_p8YZqogFBsyZqqL0jYgo5FFPQCLcBGAs/s640/20.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1226" src="https://3.bp.blogspot.com/-rNjJofovbfQ/WqoRybm9FrI/AAAAAAAAPOk/Fau5tIL5J6INPolYObu66W5NLnkEf9s_ACLcBGAs/s640/21.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="572" data-original-width="512" src="https://3.bp.blogspot.com/-c0Moc6WPYoY/WqoRzJmsCqI/AAAAAAAAPOo/u10BRj4ODAkclJliTlvGHKq4CSXaLSJpQCLcBGAs/s640/22.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1050" src="https://1.bp.blogspot.com/-0pZwFDyTDm8/WqoRzfcdB2I/AAAAAAAAPOs/BX07qJQYmOIfcDE-Mws3lGWE9A1COhrKQCLcBGAs/s640/23.jpg" width="580" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="585" src="https://2.bp.blogspot.com/-nlZmGFW4g_k/WqoR0esgZKI/AAAAAAAAPOw/VzznzimBSNsEps-y_0bcwKGk4sJseDXbwCLcBGAs/s640/24.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1264" src="https://4.bp.blogspot.com/-ZI0_sF-dW0o/WqoR0mvTK7I/AAAAAAAAPO0/M-OnlshaRQoCeWC3J5XSnZo4DqBgqu56gCLcBGAs/s640/25.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="567" src="https://4.bp.blogspot.com/-XBq4OQ1_3RI/WqoR1R6s3rI/AAAAAAAAPO4/9b8O6kUi1WoWOpc1p08GRsjGhiwBzWVngCLcBGAs/s640/26.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="853" src="https://3.bp.blogspot.com/-dDpXNFflJjY/WqoR1hwOi_I/AAAAAAAAPO8/69q0kgpCd4YKc7ZEe4uw3NP1pxEsfaI5wCLcBGAs/s640/27.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="778" src="https://1.bp.blogspot.com/-mxWdy0FORTA/WqoSCvejt5I/AAAAAAAAPPU/CL0RY9l01ngr-H_QEAK5-LiOcioE0CtVQCLcBGAs/s640/28.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="778" src="https://2.bp.blogspot.com/-cxJujm3vpvQ/WqoR2jAWxnI/AAAAAAAAPPA/GzXhhGWkVlowpzpPagKsu12XWukhwEtswCLcBGAs/s640/29.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="689" src="https://2.bp.blogspot.com/-yqM5vnBYJJI/WqoR3jv5EoI/AAAAAAAAPPE/LJRdK9BIMaAywlWJWg-p6kLlbtK5reCJQCLcBGAs/s640/30.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="790" src="https://4.bp.blogspot.com/-A3jAsiwwvSQ/WqoR44GEYSI/AAAAAAAAPPQ/qu-VYcqEsl4Jawn70CYZZ2N3QBdorgqawCLcBGAs/s640/31.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1393" src="https://4.bp.blogspot.com/-94JUhlT-8fM/Wqoao18nAmI/AAAAAAAAPP0/LgtDT2jo-8gNai0n8BK1aNC1l-AgayZrgCLcBGAs/s640/a1.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="764" data-original-width="512" src="https://1.bp.blogspot.com/-GkrU0n0qku8/WqoasXMaePI/AAAAAAAAPQg/oldRGzsO8OsMrUdnQwcbimkjYtsxLIe0QCLcBGAs/s640/a2.jpg" width="428" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="526" src="https://2.bp.blogspot.com/-6pqsgLj-IxU/WqoauaG5-RI/AAAAAAAAPQ8/6zVOSZ-pQ7UVQEvKM9yLq0sroHm12nB1QCLcBGAs/s640/a3.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="618" src="https://2.bp.blogspot.com/-t71sGneTNoo/Wqoau6QDuLI/AAAAAAAAPRA/h_q9aOo7fm0ylyYCurSiIQrOL7YdhZbBgCLcBGAs/s640/a4.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="597" src="https://2.bp.blogspot.com/-WoDmyarz4oU/WqoauwMU_TI/AAAAAAAAPRE/aD3iRvcW4R0IOOod7k22nUKDimpEOdrPQCLcBGAs/s640/a5.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="538" data-original-width="512" src="https://3.bp.blogspot.com/-icuG_j2JozY/Wqoavflk7MI/AAAAAAAAPRI/mJPfPtAfn04LSOkpQ50X97GT8kN6ce2fgCLcBGAs/s640/a6.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="711" data-original-width="512" src="https://4.bp.blogspot.com/-ex4H_virIrY/WqoavjozDXI/AAAAAAAAPRM/5gLsDOgNqsoAjAINtFiHSed0iME6B9FIACLcBGAs/s640/a7.jpg" width="457" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1137" src="https://1.bp.blogspot.com/-HZoKMoJrxVQ/Wqoavyz5AkI/AAAAAAAAPRQ/EMBkiP6GS2wRjhSGujhNugCN21Y7T8R4wCLcBGAs/s640/a8.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="860" src="https://4.bp.blogspot.com/-InDQwnXx_AY/WqoawNDO-YI/AAAAAAAAPRU/JA8rtVYa2v4AJvwpaxbLHmO2Xh1cHDAVQCLcBGAs/s640/a9.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1296" src="https://1.bp.blogspot.com/-zBtEZMimT8U/WqoapM9FM5I/AAAAAAAAPP8/lLhYXD-4yoQfy1tXNC1D4R0dZ4CC3e0wgCLcBGAs/s640/a10.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="552" data-original-width="512" src="https://4.bp.blogspot.com/-41i2ZTMuQgA/Wqoao2Skd6I/AAAAAAAAPP4/eJv4RF9_D88yneQRSoOBxIuw04kRUqzxwCLcBGAs/s640/a11.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1551" src="https://2.bp.blogspot.com/-bntOXNbR-qs/Wqoap13-OqI/AAAAAAAAPQA/GAXUJzz8udgO3iKgtDwdPQ6XuNFJf482QCLcBGAs/s640/a12.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="1422" src="https://3.bp.blogspot.com/-UALtlAb-dn0/Wqoaqdpkr9I/AAAAAAAAPQE/IrpgnKP0jGE214mdLoP1uQzqTbX2db5VACLcBGAs/s640/a13.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="586" src="https://2.bp.blogspot.com/-aXQ_PWLSh_4/WqoaqSwM67I/AAAAAAAAPQI/v68kWQBy7C4LUU2iXuq3PixpKtgiODltwCLcBGAs/s640/a14.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="778" src="https://3.bp.blogspot.com/-Nm6h4wZTgGQ/Wqoaqx8bXFI/AAAAAAAAPQM/86uc9glMbFEOGRRZNabmfZE8w2mCiwlRgCLcBGAs/s640/a15.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="579" data-original-width="512" src="https://2.bp.blogspot.com/-IAHxXvueNM4/WqoarVj9soI/AAAAAAAAPQQ/xxTdTySpW9sJB1-igv2VVYb3h3vUPnCrwCLcBGAs/s640/a16.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="591" data-original-width="512" src="https://2.bp.blogspot.com/-P2Lvg8vtmEQ/Wqoarp2RhlI/AAAAAAAAPQU/TsTdT_tyXFEk1lA6_MDpwdcX4ps1vU1VACLcBGAs/s640/a17.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="825" src="https://4.bp.blogspot.com/-C4dcvFaNCrw/Wqoar3i9WyI/AAAAAAAAPQY/ZydW11mmLvoXNrBOJoWL12DyGnxO4MGTQCLcBGAs/s640/a18.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="675" src="https://1.bp.blogspot.com/-LcvU1QnvtRc/WqoasAQUUsI/AAAAAAAAPQc/YmZky8aCt-kRDS0_g69_-sUSqbSl5q_qgCLcBGAs/s640/a19.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="902" src="https://4.bp.blogspot.com/-zV-v4zMOaAg/Wqoasxgas1I/AAAAAAAAPQk/bVlVO3uEbXQyOyzHsIQB8F3-Hf-vFbHbwCLcBGAs/s640/a20.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="640" src="https://3.bp.blogspot.com/-gMHyMpKOYqg/WqoatAM467I/AAAAAAAAPQo/L09LSOzRyjYZqc4Jdpa9z1Vrba-0-uSRwCLcBGAs/s640/a21.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="538" data-original-width="512" src="https://3.bp.blogspot.com/-6hKy7iU7Gsw/WqoatEbT5ZI/AAAAAAAAPQs/4bSFtzFQ0kcPISoPRocYTAKr3UZTW0mUACLcBGAs/s640/a22.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="736" src="https://1.bp.blogspot.com/-1Zs7G4iRI3Y/WqoatmR9ljI/AAAAAAAAPQw/F4u22wjpNks84usL8fkLAqXcIKWtA5o9ACLcBGAs/s640/a23.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="567" src="https://3.bp.blogspot.com/-v-azvrC9uLg/Wqoat1cQQRI/AAAAAAAAPQ0/6OZlbv3kxQ4WM_cCJsz1k3o9vralwoSdQCLcBGAs/s640/a24.jpg" width="520" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" data-original-height="512" data-original-width="534" src="https://1.bp.blogspot.com/-CacHU0rf6OA/WqoauOBkv6I/AAAAAAAAPQ4/TUuSTFPGGlQ44AaztSGr2mtGlGXp3hMJwCLcBGAs/s640/a25.jpg" width="520" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></td></tr>
</tbody></table>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-89587464121980452732018-02-27T06:18:00.001-08:002018-02-27T06:22:24.842-08:00LetsEncrypt with an Apache vHost on a Ubuntu 12.04 serverI sudo-su-d into my root account and enabled the ssl module:
<br />
<pre>$ a2enmod ssl
$ service apache2 restart
</pre>
I installed the letsencrypt client:
<br />
<pre>$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
</pre>
I shut down my Apache – there is probably a better way, but on a low-traffic test server/domain, that’s entirely okay for me. I then requested a new certificate and started Apache up again.
<br />
<pre>$ service apache2 stop
$ ./letsencrypt-auto certonly --standalone --email email@example.com -d example.com
$ service apache2 start
</pre>
Now I have a lovely certificate! Yay!
Now I went into the config file of my virtual host and changed things around a bit. I am sure that it is frowned upon to put two VirtualHost directives with two different ports into one config file, but… ¯\_(ツ)_/¯
<br />
<pre><VirtualHost *:80>
ServerName example.com
Redirect "/" "https://example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot "/var/www/example/public"
DirectoryIndex index.htm
<Directory /var/www/example/public>
Options FollowSymLinks
AllowOverride All
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
</VirtualHost>
</pre>
One more apache restart
<br />
<pre>$ service apache2 restart
</pre>
Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-40876625652145718132018-02-20T05:34:00.000-08:002018-03-14T16:26:23.120-07:00지난 1년 간 나의 스타트업(?) 생활기세상은 복잡계다. 그래서 예측이 불가능하다. 돌이켜보면 꽤나 많은 시간들이 해킹사고 후속 작업에 들어갔고 내 계획은 5%도 실현하지 못했다. 그 때문에 지난 1년은 아쉬움이 크다. 한줄로 요약하면 이렇다, "나에게도 계획은 있었다. 해킹 사고 터지기 전까진”.<br />
<br />
“Everyone has a plan until they get punched in the mouth” — Mike Tyson <br />
<br />
한편, 그 동안 내가 축적해온 대형 규모의 우아한 지식과 기술은 오히려 쓸모가 없었다. 소규모 스타트업은 그에 맞는 가볍고 당장 할 수 있는 솔루션이지 않으면 매우 어렵기 때문이다. Y 컴비네이터의 전설 폴에 한마디가 귀에 맴돌기 시작했다. <br />
<br />
"Do Things That Don’t Scale” — Paul Graham <br />
<br />
그래서 시작해봤다. 간단한 리뷰 분류하는 기계학습 알고리즘을 젊은 친구들과 함께. 결론부터 말하면 별로 쓸모 없었다. 기술 자체로서의 가치보다는 기술이 동반하는 경제적 가치에 보다 초점을 두어야 함을 깨달았다. <br />
<br />
"The *real* money comes from merchandising. I learned it from this documentary” — Elon Musk <br />
<br />
오늘날의 대부분 O2O는 모바일 정보와 오프라인 구매를 연결·확장하는 비지니스 모델을 취한다. 결국 정보량과 검색의 정확도, 그리고 프로모션으로 귀결된다. 정보량 수집을 가속하고 품질을 높일 수 있는 랭킹모델과 풀텍스트 검색 엔진을 장착하는 것이 내 마지막 프로젝트였다.<br />
<br />
"What I guess I'm trying to say is that search is still the killer app” — Eric Schmidt <br />
<br />
1년간 정신없이 지냈던 것 같고, 많은 것들을 느끼고 배우고 경험할 수 있어 좋았고, 기술인으로써 이제는 더 잘 맞고 잘 할수 있는 곳을 찾아 옮겨 가기로 했다. :-)<br />
<br />
스타트업/벤처로 이직을 고민하는 이들에게 한가지 조언하자면, "하고 싶으면 그냥 창업해라".Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-83359351559780758312017-12-04T00:02:00.007-08:002018-02-19T03:56:03.029-08:00AWS re:Invent 2017 참관기<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-lUbolFxeMFU/WiT6gNXAbUI/AAAAAAAAOMg/zVwH4mKJawcWuxQ0hxpxcuO0YhZTBGJPQCEwYBhgL/s1600/20171127_102548.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://3.bp.blogspot.com/-lUbolFxeMFU/WiT6gNXAbUI/AAAAAAAAOMg/zVwH4mKJawcWuxQ0hxpxcuO0YhZTBGJPQCEwYBhgL/s320/20171127_102548.jpg" width="240" /></a></div>
바로 지난 주, 나와 클라우드플랫폼팀장 제임스 동행으로 여기어때 R&D센터에서 AWS 2017 행사를 참관했다.
덴버/샌프란시스코와는 전혀 다른 라스베가스 스트립의 좌우로 초대형 호텔과 카지노가 즐비한 풍경에 한번 놀랬고, Registration Booth 부터 그 큰 규모에서 두번 놀랬다.
참고로 라스베가스는 이렇게 사람이 많이 모일수 있는 환경을 가지고 있어 대형 세미나가 지속적으로 열린다고 한다 (CES도 동시에 개최된 걸로 안다). 4만 명이 넘는 참가자가 라스베가스 전역에 있는 호텔 행사장에 모였고, 우버 드라이버들은 AWS 컨퍼런스 왔냐고 자연스레 안부 인사를 묻더라.
뭐 이미 잘 알려져 있듯이 한국에 많은 기업이 AWS를 사용하고 있다. 나는 참고로 re:Play 행사에서 오다가다 과거 네이버 동료도 거의 10년만에 만나기도 하였다. :-)<br />
<br />
기술 세션들에 대한 리뷰는 모두 참석하지 못했기 때문에 내 눈이 정확하다 말할 순 없지만, 두 가지로 요약된다. Serverless 그리고 AI 다.<br />
<br />
<br />
Serverless는 프로그래밍 패러다임을 송두리째 바꾸고 있으며, 더 이상 풀스택 엔지니어, 그들의 인프라 노하우와 경험적 스킬은 (희박한 오픈소스 해커 수준 아니고서야) 대우받기 힘든 세상이 되었다.<br />
<br />
AI 분야도 마찬가지인데, 이미 학습능력이 클라우드 안으로 들어가기 시작했다.<br />
<br />
<br />
<ul>
<li>넷플릭스의 데이터 엔지니어로 유명한 배재현님의 글도 읽어볼 필요가 있음 https://www.facebook.com/jaehb/posts/10214839335118339?pnref=story </li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-cfU21jyyaqc/WiT6jG3ajJI/AAAAAAAAOMg/3d4InnozLT8ZBj8NAcpnI5RTa5JCQb9MACEwYBhgL/s1600/20171130_133220.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://2.bp.blogspot.com/-cfU21jyyaqc/WiT6jG3ajJI/AAAAAAAAOMg/3d4InnozLT8ZBj8NAcpnI5RTa5JCQb9MACEwYBhgL/s640/20171130_133220.jpg" width="640" /></a></div>
<br />
내 눈에 들어온 슬라이드 한장 …
내가 가장 열성적으로 들었던 딥 러닝 서밋은 장장 4시간 연짱 세션이었고, 그중에 눈에 너무 꽃힌 장표 한장이 있으니 …
주로 내가 많이 얘기하던 내용과 비슷한 면이 있어 그럴수도 있는데, 사용자 경험은 OS에서 웹으로, 웹에서 모바일, 그리고 이제 AI로 넘어가는 과정이라고 볼 수 있다. 우리 IT 기술은 현재 어디에 머물고 있는가? :-)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-8nZgeHvs3Vk/WiT6lJE8GYI/AAAAAAAAOMo/3cNpqM59B5AXidNURyx74Hhn6-ZsIShygCEwYBhgL/s1600/20171201_102233.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="640" src="https://2.bp.blogspot.com/-8nZgeHvs3Vk/WiT6lJE8GYI/AAAAAAAAOMo/3cNpqM59B5AXidNURyx74Hhn6-ZsIShygCEwYBhgL/s640/20171201_102233.jpg" width="480" /></a></div>
<br />
여러가지 생각들을 뒤로하고 귀국 바로 전 그랜드 캐년에 들러 광활한 세상을 느끼고 그렇게 한국에 돌아왔다 …Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-58125179860469505142017-10-11T23:41:00.002-07:002017-10-11T23:45:08.979-07:00조직 관성(Organizational Inertia)최근 들어던 세미나에 의하면 자연 법칙으로 존재하는 관성은 조직에도 존재한다.<br />
<br />
다소 철학적 고찰이긴 한데, 우선, 관성(inertia)부터 알아보자.<br />
<br />
관성이란 버스가 급출발 할 때 뒤로 쏠리는 그 힘이 바로 관성이다. 관성은 원래 상태를 유지하려는 성질에 불과하니 진짜힘이 아니다. 그래서 관성을 가짜힘이라고 한다. 진짜힘은 버스를 급출발 시키는 힘이다.<br />
<br />
몸이 뒤로 쏠리는 가짜힘의 크기는 버스를 급출발 시키는 진짜힘의 크기에 의해서만 결정된다. 이게 관성과 운동의 상대성이다.<br />
<br />
관성과 운동의 상대성을 생각하면, 조직의 관성은 변화의 크기에 의해서 결정되므로 그것은 요주의 대상이 아니라 오히려 변화의 파도라고 볼 수 있겠다.Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0tag:blogger.com,1999:blog-9588112.post-26412370041864687912017-02-21T18:18:00.000-08:002017-02-21T18:18:25.749-08:00텍스트 분류를 위한 Adversarial Training 최근 뉴럴 네트워크 모델 중에 가장 흥미롭다고 극찬받는 GAN 이라는게 있다. discriminator와 generator networks 두 개를 가지고 학습하는데, 하나는 더 잘 분류하기 위한 네트워크이고 하나는 더 잘 속이기 위한 네트워크로 이를 동시에 학습하면서 정확도를 높인다.<br />
<br />
이 모델을 텍스트 분류에도 적용해봤다는 논문이 바로 Adversarial Training Methods for Semi-Supervised Text Classification [<a href="https://arxiv.org/abs/1605.07725">link</a>].<u> </u>방식은 다음과 같이 LSTM 네트워크 (분류니까 many-to-one) 두 개를 놓는다:<br />
<br />
<div style="text-align: center;">
<a href="https://1.bp.blogspot.com/-tT17DcwjJw0/WKzqEsDnIXI/AAAAAAAALVI/PeTZiPoSI0AZlOFMwgmgcJ7n_bpbnLVKgCLcB/s1600/x.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-tT17DcwjJw0/WKzqEsDnIXI/AAAAAAAALVI/PeTZiPoSI0AZlOFMwgmgcJ7n_bpbnLVKgCLcB/s1600/x.png" /></a>
</div>
<br />
(a) 네트워크는 원래대로 실제 데이터를 학습하고,(b) 네트워크는 속이기 위한 가짜를 생성하는데, 논문 Eq.(2) 수식을 보면 \(y\)가 레이블이고 \(x\)는 입력이며 \(r_{adv}\) 이 adversarial noise 값이다.<br />
<br />
이 때 adversarial noise 값은 \(\epsilon\) 보다 작은 범위의 변화이나, 이게 왜 잘 작동할 것 같냐면 원본 텍스트에서 의미는 달라지나 기계가 봤을 땐 거의 똔똔일 것 같은 가짜를 만드는거다. 이걸 보자마자 상당히 가치있는 내용이라는 생각이 들었다. 그 다음으로 semi-supervised learning을 위한 virtual adversarial training이 Eq.(3)(4)(5) 등에 소개되어 있다.<br />
<br />
<br />
테스트 데이터는 영화 리뷰 데이터를 사용하였는데 이게 텍스트에 감성이 담겨있어 기계가 해결하기 묘한 데이터라 실험에 적합하다 판단했기 때문이라고 추측한다. 코드나 그런건 Github에 공개되어있진 않다. Edward J. Yoonhttp://www.blogger.com/profile/06474219045532241598noreply@blogger.com0