출처 : 인공지능과 딥러닝 

저자 : 마쓰오 유타카

미래를 보다 정확하게 예측하고 준비해 두는것은 매우 중요하다.

앞으로 여러분의 업무나 생활에조금이라도 도움이 되기를 바란다, 어쩌면 인공지능의 전체적인 것을 이해하는것은 조금 긴여행이 될지도 모르지만 꼭 끝까지 읽었으면 한다.

미래에우리들의 생활 깊숙이 침투해오는 인공지능의 전체적인 모습을, 지금 이 순간 움켜쥐면 그 지식은 반드시 가까운 미래인 5년, 10년의 나침반이 될 것이다. 그리고 이책을 끝까지 다읽을 즈음에는 인공지능에 대한 당신의 접근 방법이 보다 깊이 있고, 보다 세련된것으로 바뀌고 있을 것이다.

시작은 긴여행의 첫걸음으로 인공지능은 아직 미완성이다 라는 사실에서부터 시작해보자.


인공지능이란 무엇인가?

전문가들의 견해

인공지능 연구하는 사람들이 많은 가운데 그들은 과연 어떻게 생각하는가 알아보자. 인공지능이란 연구분야는 일반적으로 여겨지는 것보다도 좀 더 학술적인 분위기 혹은 진리의 추구 색조가 강하다.

1. 인공적으로 만들어진 지능을 가지는 실체. 또는 그것을 만들자고 함으로써 지능 자체를 연구하는 분야다.

2. 지능을 메커니즘 내지는 마음을 가지는 메커니즘이다.

3. 인공적으로 만든 지적인 행동을 하는물건(시스템)이다.

4. 인간의 두뇌 활동을 극한까지 모사하는 시스템이다.

5. 인공적으로 만든 새로운 지능의 세계이다.

6. 지능의 정의가 명확하지 않음으로 인공지능을 명확히 정의 할 수 없다.

7. 궁극에는 인간과 구별되지 않는 인공적인 지능

8. 인공적으로 만들어진지능을 가지는 실체. 또는 그것을 만들자고 함으로써 지능 자체를 연구하는 분야이다.

9. 사람의 지적인 행동을 모방, 지원, 초월하기 위한 구성적 시스템

10. 공학적으로 만들어지는 지능이지만, 그 지능의 수준은 사람을 뛰어넘고 있는 것을 상상하고 있다.

11. 계산기 지능 가운데 인간이 직.간접적으로 설계할 경우를 인공지능이라고 불러도 좋지 않을까 생각한다.

12. 인공적으로 만들어진 인간과 같은 지능 또는 그것을 만드는 기술.


인공지능에 대한 세상의 견해

인공지능으로 유명한 교과서인 스튜어트 러셀의 '에이전트 어프로치'에서는 인공지능을 포착하고 현명하게 행동하기 위한 인공지능의 다양한 방법들을 설명하고 있다.

1단계에서 부터 4단계 까지 구분이 가능하며


1레벨 단순한 제어 프로그램을 '인공지능'이라고 칭하고 있다.

레벨1은 마케팅적으로 '인공지능' 즉 'AI'라고 지칭하는 것이며, 지극히 단순한 제어 프로그램을 탑재하고 있는 전자제품을 인공지능 탑재 라고 부르는 경우에 해당한다.

에어컨이나 청소기, 세탁기 최근에는 전동 전기면도기까지 세상에는 인공지능을 자칭하는 상품이 넘쳐나고 있다. 이러한 기술은 제어공학이나 시스템공학이라는 이름으로 이미 역사가 긴 학문 분야이며, 이러한 것을 인공 지능이라 칭하는것은 그 분야의 연구자나 기술에도 어느정도 실례가 된다고 생각한다. 가전제품의 '인공지능 탑재'들을 레벨 1의 인공지능이라고 부르기로 한다.


2레벨 고전적인 인공지능

레벨 2는 행동의 패턴이 지극히 다채로운 경우에서의 지능을 말한다. 장기 프로그램이나 청소로봇 혹은 질문에 대답하는 인공지능 등이 이에 해당한다.  이것은 소위 고전적인공지능이라 일컬으며 입력과 출력 관계를 맺는 방법이 세련 되어 입력과 출력의 조합수가 극단적으로 많은 경우를 주로 일컫는다. 이때 인공지능을 적절한 판단을 내리기위해 추론/탐색을 하거나, 기존에 보유한 지식 베이스를 기반으로 판단하기도 한다. 고전적인 퍼즐을 푸는 프로그램이나 진단 프로그램이 여기에 해당된다.


3레벨 기계학습을 받아들인 인공지능

레벨3은 검색 엔진에 내장되어 있거나 빅데이터를 바탕으로 자동적으로 판단하는 인공지능이다. 추론의 구조나 지식 베이스가 데이터를 바탕으로 학습되는 것으로 전형적으로 기계학습의 알고리즘이 이용되는 경우가 많다. 기계 학습이라는 것은 표본이 되는 데이터를 바탕으로 규칙이나 지식을 스스로 학습하는 것이다. 이 기술은 패턴인식이라는 과거로부터의 연구를 기초로 1990년대부터 지행되어 2000년대에 들어와 빅데이터 시대를 맞이하면서 더욱 진화 하고 있다. 최근의 인공지능은 이 레벨 3을 일컫는 경우가 많다. 과거에는 레벨2였던 것도 기계학습을 받아들여 레벨 3으로 올라오고 있는 것이 현재 모습이다.


4레벨 딥러닝을 받아들인 인공지능

그 위의 단계인 레벨 4로 기계학습을 할 때의 데이터를 나타내기 위해서 사용되는 입력값(특징 이라고 불린다.) 자체를 학습하는것이 있다. 제 6장에서 소개하는 딥러닝이 여기에 해당한다. 이책에서는 '특징표현 학습'이라고 부른다.

서두에서도 다루었듯이 미국에서는 딥러닝 관련 분야의 투자 경쟁-기술 개발 경쟁 -인재 획득 경쟁의 치열함이 극에 달하고 있고, 지금 가장 뜨거운 영역이기도 하다.

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
기계 학습  (0) 2016.01.21
인공지능 발전 역사  (0) 2016.01.21
Posted by MIDDLE
,

/**


 * 예제 :

 *   var data = new Map();

 *   data.put("key1", "value1");

 *   data.put("key2", "value2");

 *   data.get("key1");

 *   data.size();

 *   

 */

  

Map = function(){

this.map = new Object();

};

Map.prototype = {   

put : function(key, value){   

/*if ( value.constructor == Array ){

for ( var i =0 ; i < value.size(); i++ ) {

 this.map[key] = value[i];

 alert(i + key + " : " + value[i]);

}

alert('This is an array!' + value.legnth);

}else{*/

this.map[key] = value;

/*}*/

},   

get : function(key){   

return this.map[key];

},

containsKey : function(key){    

return key in this.map;

},

containsValue : function(value){    

for(var prop in this.map){

if(this.map[prop] == value) return true;

}

return false;

},

isEmpty : function(key){    

return (this.size() == 0);

},

clear : function(){   

for(var prop in this.map){

delete this.map[prop];

}

},

remove : function(key){    

delete this.map[key];

},

keys : function(){   

/*var keys = new Array();   

for(var prop in this.map){   

keys.push(prop);

}   

return keys;*/

var keys = new Array();

var resVal = "";

var count = 0;

for(var prop in this.map){   

keys.push(prop);

if(count > 0){

resVal += "_";

}

resVal += prop;

count++;

}   

return resVal;

},

values : function(){   

/*var values = new Array();   

for(var prop in this.map){   

values.push(this.map[prop]);

}   

return values;*/

var values = new Array();

var resVal = "";

var count = 0;

for(var prop in this.map){   

values.push(prop);

if(count > 0){

resVal += "_";

}

resVal += this.map[prop];

count++;

}   

return resVal;

},

size : function(){

var count = 0;

for (var prop in this.map) {

count++;

}

return count;

}

};

 

 


Key와 Values는 _ 를 이용하여 구분자를 사용하였다. JavaScript Taraditional을 사용하게 될경우 배열의 형태가 깨질 우려가 있기 때문에 배열의 구분자는 사용하지 않아야 한다.

  



Ajax 보내는 부분에서 data 불러오기

function _fnCallJson(reqURL, data, async, callback) {

// 처리시는 동기화

$.ajaxSetup({

async : false

});

var args = "";

// callback 함수가 null일시에 값만 return 해준다.

var _response;

var defaultAsync = false;

var resDataType = "json";

if (data != null && data.size() > 0) {

var keys = data.keys().toString().split('_');

var values = data.values().toString().split('_');

alert("_fnCallJson Key :  " + data.keys().toString() + " val :  "+  data.values().toString());

for (var i = 0; i < keys.length; i++) {

if (i > 0)

args += "&";

if (keys[i].length > 0)

args += keys[i] + "=" + values[i];

}

}

if (callback != null ){

}

//else{

// resDataType = "html";

//}

var resAsync = "";

if (async != null && async.length > 0) {

resAsync = async;

} else {

resAsync = defaultAsync;

}

$.ajax({

type : "POST",

url : reqURL,

data : args,

async : resAsync,

traditional : true,

contentType : "application/x-www-form-urlencoded; charset=utf-8",

dataType : resDataType, // xml, html, json, jsonp, script, text

success : function(data) {

if (callback != null ) {

callback(data);

}else{

//_response = $.parseJSON(data);

_response = data;

}

}

});

return _response;

// 처리시는 동기화

$.ajaxSetup({

async : false

});

}

Posted by MIDDLE
,
  • Tomcat 서버를 sh shutdown.sh 명령어를 통해 Shutdown 한 후 webapps 폴더 내부에서 모든 파일을 삭제를 한다. 올리고자하는 WAR파일명을 ROOT.war로 변경한뒤 폴더에 업로드 후 bin 폴더의 sh startup.sh 명령어로 실행한다.

  • Leave your war file in $CATALINA_BASE/webapps under its original name. Turn off autoDeployand deployOnStartup in your Host element in the server.xml file. Explicitly define all application Contexts in server.xml, specifying both the path and docBase attributes. You must do this because you have disabled all the Tomcat auto-deploy mechanisms, and Tomcat will not deploy your applications anymore unless it finds their Context in the server.xml.

    second method: in order to make any change to any application, you will have to stop and restart Tomcat.

  • $CATALINA_BASE/webapps 에 고유 이름이 있다면 Ex) webapps/project. shutdown 완료 이후 conf 폴더 내부의 server.xml 파일을 확인 이후 docBase를 추가한다.
    docBase추가 방법은

    <Host name="localhost"  appBase="webapps"

                unpackWARs="true" autoDeploy="true">


            <!-- SingleSignOn valve, share authentication between web applications

                 Documentation at: /docs/config/valve.html -->

            <!--

            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

            -->


            <!-- Access log processes all example.

                 Documentation at: /docs/config/valve.html

                 Note: The pattern used is equivalent to using pattern="common" -->

          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

                   prefix="localhost_access_log." suffix=".txt"

                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />

            <Context docBase="project" path="" reloadable="true" />

    </Host>

아래의 한줄을 Server.xml 에 추가를 하면 해결된다.

Posted by MIDDLE
,