반응형


처음에 제목만 보고 생각하기에는 인공지능, 알고리즘등의 내용의 책일꺼라 생각했었는데 예상밖으로 다양한 내용들이 포함되어 있는 책이다. 수학적인 내용보다는 오히려 철학적인 내용들이 많이 포함되어 있다. 그리고 그동안에 내가 생각해 왔던 기계, 인공지능이라는 범주가 얼마나 좁았는지 느끼게 해준 책이었다. 



목차를 살펴보면 본 내용이 총 8장으로 되어있다. 맨 처음 기계에 대한 생각에서 부터 어떻게 발전해 왔고 어떤 실패를 거쳤는지 차근 차근 설명해주고 있다. 그리고 기계가 가지고 있는 한계와 또 그 한계를 극복 하려는 연구들, 윤리적 문제들에 대해서 정말 다양한 내용들이 담겨 있다. 



인공지능의 발전 사에 대해서도 큰 흐름을 콕콕 찝어서 간단히 연대순으로 보여주기도 한다. 


그리고 실제로 연구과정을 거치면서 인터뷰한 사례를 담아서 보여준다. 이런 인터뷰 내용들은 자주 나오는데 사람의 인터뷰 뿐만 아니라 인공지능과 인터뷰 했던 내용들도 있다. 신문 기사를 스크랩 한것 처럼 그당시의 인터뷰 상황을 그대로 보여줘서 더 좋았다. 



그리고 마지막 부록에는 위 사진과 같은 인공지능에 대한 재미있는 이야깃 거리들을 모아서 보여주고 있다. 


이제 이책의 장점과 단점에 대해서 말해보려고 한다. 장점에 대해서는 글이 좀 길것 같으니 단점부터 말하겠다.


단점

- 아무래도 상황에 대한 설명과 지식에 대한 설명이 많다 보니 페이지 수가 몇장 안되는 데에도 불구하고 길다라는 느낌을 자주 받았다. 중간중간에 그림이라도 조금 넣어줬으면 더 좋았을것 같다.


장점

- 내가 생각해 볼 만한 철학적 문제들에 대해 많이 던져준다. 

- 내가 생각하지 못했던 인공지능에 대해서 좀더 깊이 있게 알려준다. 


길게 쓴다고 했던 장점을 달랑 2줄만 써서 내가 장점이라고 쓴 부분들을 어느 대목에서 느꼈는지 좀 서술해 보려고 한다. 


인간이 새로운 형태의 인공지능에 더 의지하게 될 수록 아마 인간의 사고방식을 인공지능에 어울리게 바꿔야만 할지도 모른다.


여기에서 새로운 형태의 인공지능은 빅데이터에 기반한 모델들을 의미한다. 수많은 데이터를 분석해서 뽑아낸 결과를 우리들은 받아들이고 있다. 간단한 예로 쇼핑몰의 추천 품목들이 있다. 이 추천 품목이 왜, 어떻게 뽑혔는지는 알수 없다. 내가 사이트에 들어가서 했던 수많은 행동들을 분석해서 나온 결과물일 뿐이다. 그 중간 단계를 인공지능이 어떻게 분석을 했으며 어떻게 연관관계를 맺었는지는 점차 알수 없게 되가고 있다. 물론 알수는 있겠지만 사람이 다 들여다 보기에는 긴 시간이 걸릴것이다. 지능이라고 하기 보다는 조합에 가깝다고 말할 수 있다. 하지만 그 조합의 결과물을 무시할수는 없게 된 상황이다. 지금까지 이런 것들을 인공지능이라고 생각해본적이 없었다. 그냥 데이터 분석 이라고 생각만 해왔다. 하지만 인공지능을 구현하는 방법이 데이터 기반으로 변해가고 있는 이 시점에서 생각해보면 우리는 수많은 인공지능의 도움을 받고 있는것이다. 



딜레마의 상황에서 인공지능은 어떻게 판단을 해야 하나


영화 "아이로봇" 에서 주인공 윌스미스는 차사고가 났는데 지나가던 NS-4 에 의해서 구해진다. 이때 같이 윌스미스와 어린 여자 아이가 죽음의 위기에 처했는데 NS-4는 윌스미스를 구해준다. NS-4 가 판단하기에는 좀더 생존률이 높은 윌스미스를 구한것이다. 하지만 윌스미스는 어린 여자아이를 구했어야 하는게 맞다고 생각한다. 이처럼 우리 생활에는 예상치 못한 선택의 순간들을 직면하게 된다. 이때에 과연 인공지능은 어떻게 판단을 해야 하는지. 정말 어려운 문제다. 

이와 비슷한 문제로 이 책에서는 자율주행에 대해 이야기 한다. 최근 자율주행에 대한 관심이 높아지면서 여기 저기에서 개발을 진행중에 있다. 그리고 실제 필드 테스트도 이루어 지고 있다. 그리고 가끔은 자율주행 차량때문에 사고가 난 기사도 종종 볼수 있다. 예전에는 자율주행을 생각하면 차량이 스스로 움직이면서 사고가 나지 않는게 중요하다고 생각했다. 자율주행에 대한 윤리적 대 전제에 대한 생각은 해본적이 없다. 여기서 말하는 대 전제, 즉 윤리적 원칙이란 이런거다.

도로에서 자율주행 자동차가 운행중이다. 그런데 위험을 감지하고 피하려고 하는데 피하는 순간 또다른 피해가 발생하게 되는 상황이다. 그럼 피하는게 나은것인가 피하지 말아야 하는것인가. 이런 판단에 대해서 대전제가 필요하다는 의미이다. 지금은 자율주행을 연구하는 여러 회사들이 자신들의 알고리즘을 통해서 자율주행 차량을 만들고 있다. A회사의 차량과 B 회사의 차량이 앞에 말한 상황에서 동일하게 행동한다는 보장이 없다. 그렇기에 이런 부분들은 공동적으로 연구가 되어야 하고 서로 공유가 되어야 하는 윤리적 원칙들이 꼭 필요하다는 것이다. 단지 운전자가 운전대를 잡지 않고 책을 읽어도 스스로 움직이는 자동차를 생각하며 그저 좋아하기에는 풀어야 할 숙제들이 정말 많다는 것을 느꼈다. 


이밖에도 정말 많은 부분들에서 내 머리를 탁! 치는 내용들이 많이 있었다. 잠겨있던 내 머리에 창문을 만들어준 느낌이라고나 할까. 리뷰어 책 고를때 정말 넣을까 말까 고민한 책이었는데 고르길 정말 잘했다. 기계나 인공지능에 관심이 없어도 철학이나 윤리에 관심이 있는 사람들에게도 충분히 도움이 되는 책이라고 생각이 된다. 


728x90
반응형
반응형

최근에 시간 관련 Data 를 가지고 삽질을 해서 간단히 적어본다.


상황은 이렇다. 

테이블에 특정 Data 를 저장 하고 있었는데 colum 에 언제나 그렇듯 생성 날짜, 시간 형태의 컬럼이 존재하고 있었다. Timestamp type 이었고 Data 는 잘 insert 가 되는 상황이었다. 그런데 이상하게 나는 분명 UTC 기준으로 Data 가 insert 될거라 생각을 했는데 그게 아니었다. Local 기준으로 Data 가 들어가고 있었다. 그러다 보니 이 Data를 사용하는 곳에서 예상치 못한 오류가 발생했다. 


1
2
3
4
5
6
@Test
public void jodaTime(){
    DateTime dateTime = new DateTime(DateTimeZone.UTC);
    System.out.println("dateTime : " + dateTime);
    System.out.println("dateTimeToDate : " + dateTime.toDate());
}
cs


문제가 된 부분은 위에 코드에 toDate() 부분이었다. 위 코드를 실행하면 결과는 아래와 같이 나온다. 


1
2
dateTime : 2019-02-13T07:01:03.407Z
dateTimeToDate : Wed Feb 13 16:01:03 KST 2019
cs


뭔가 좀 이상하다. dateTime 은 UTC 기준으로 나왔지만 toDate 값은 로컬 기준으로 나온다. 그리고 그 값이 DB 로 저장이 되고 있었다. 


Why????


위에 있는 toDate() 함수는 아래와 같이 구현이 되어있다. 그런데 여기에서 저 Date 가 문제다.


1
2
3
public Date toDate() {
  return new Date(getMillis());
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* Allocates a <code>Date</code> object and initializes it to
* represent the specified number of milliseconds since the
* standard base time known as "the epoch", namely January 1,
* 1970, 00:00:00 GMT.
*
* @param   date   the milliseconds since January 1, 1970, 00:00:00 GMT.
* @see     java.lang.System#currentTimeMillis()
*/
public Date(long date) {
  fastTime = date;
}
 
cs


@see 를 보면 java.lang.System을 참조하고 있다. -_-;. 그런 결과 아무리 앞에서 offset을 설정해봐야 결과값은 로컬에 있는 jvm 의 timezone을 따라간다는 거다. 


만약 DB 에 컬럼 타입이 String 이었다면 이렇게 하면 해결이 되긴 한다.


1
2
3
4
5
DateTime dateTime = new DateTime(DateTimeZone.UTC);
System.out.println("dateTime : " + dateTime);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.of("UTC")));
System.out.println("dateTimeToDateFormatter : " + simpleDateFormat.format(dateTime.toDate()));
cs


1
2
dateTime : 2019-02-13T08:07:53.819Z
dateTimeToDateFormatter : 19. 2. 13 오전 8:07
cs


값은 동일하게 나오긴 하지만 그렇다고 DB 컬럼을 바꾸기에는 뭔가 좀 부담스럽다.

그러면 어떻게 하는게 좋을까... 생각을 해보다가 이런 방법을 생각했다.


1. 현재 로컬의 OffsetDateTime 을 구한다. 

2. 그리고 로컬에 있는 Timezone 의 offset을 구한다.

3. offset 에 따른 시간 차이를 분 또는 초로 환산한다.

4. 환산한 값을 현재 로컬 Time 값에서 빼거나 더한다. 


절차가 좀 복잡 하긴 하지만 DB 에는 UTC 값을 저장할 수 있게 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void getUTC(){
    OffsetDateTime now = OffsetDateTime.now();
    System.out.println("현재 시간 : " + now);
 
    // Offset
    ZoneOffset offset = now.getOffset();
    System.out.println("offset : " + offset);
 
    // Offset 을 second 로 변경
    int totalSeconds = offset.getTotalSeconds();
    System.out.println("totalSeconds : " + totalSeconds);
 
    OffsetDateTime offsetDateTime = null;
    if (totalSeconds > 0){
        offsetDateTime = now.minusSeconds(totalSeconds);
    }else{
        offsetDateTime = now.plusSeconds(totalSeconds);
    }
 
    System.out.println("offsetDateTime : " + offsetDateTime);
}
cs


1
2
3
4
현재 시간 : 2019-02-14T13:30:38.592+09:00
offset : +09:00
totalSeconds : 32400
offsetDateTime : 2019-02-14T04:30:38.592+09:00
cs


여기에서 plus 와 minus 할때 totalSecond 값이 음수이냐 양수이냐 에 따라서 반대로 해야 한다. 우리 나라 같은 경우 +9시간이기 때문에 UTC로 맞추려면 빼줘야 한다. 


시간 들어가는 DATA 값은 정말 복잡하고 생각해야 될 것이 많은 것 같다.



728x90
반응형
반응형

오래전에 사서 조립을 했었던 레고 펫샵을 꺼내들었다. 물론 조립은 내 의도는 아니었고 지후가 조립하고 싶어해서 천천히 조립하기 시작했다.




예전에 모듈러 시리즈 처음 샀을때 레고 상자가 이렇게 크구나~~ 라고 감탄 했었는데. 다시 꺼내 봐도 크기는 정말 크다. ^^ 



이게 완성된 모습이다. 모듈러 시리즈는 정말 조립하면서 감탄을 하게되고 조립 하고 나서도 감탄을 하게 된다. 그 정교함과 세밀함. 그리고 하나하나 꼼꼼함이 대단하다고 느끼게 된다. 



작은 건물들은 보통 뒷면이 다 뚫려 있는데 모듈러 시리즈는 뒷면도 이렇게 다 막혀 있다. 



펫샵 외부에는 이렇게 간판이 달려있다. 저 간판 조립할때 정말 놀랐었는데... 글자를 저렇게 만들어 낼지 누가 상상을 했을까.  건물 밖에는 판매하는 물건들이 진열되어 있고 입구 창문으로는 앵무새가 보인다. 


건물 외벽쪽에는 창가에 꽃이 놓여있고 맨 위층 창문에도 아기자기한 모양들이 잘 꾸며져 있다. 



펫샵 1층 내부 모습이다. 강아지도 있고 고양이도 있다. 그리고 수족관도 한쪽에 놓여져 있다. 



2층에는 이렇게 주방이 있다. 1층이 가게이고 2층이 주방, 3층에는 침실이 있다. 주방에는 난로도 있고 싱크대, 에스프레소 머신, 가스레인지가 놓여있다. 그리고 탁자와 의자가 배치되어있다.



3층에는 이렇게 침실이 마련되어있다. 

이제 펫샵 옆집을 살펴 보자.



1층의 모습을 보면 문 옆에 모자 걸이가 있고 계단 밑에는 화장실이 위치해 있다. 창문쪽에는 꽃병이 놓여져 있다. 



2층은 한참 공사중이다. 페인트 칠하는 아저씨가 열심히 페인트를 칠하고 있다. 



3층에는 창고가 있고 외부로 나갈 수 있는 공간이 있다. 바깥에도 역시 꽃들이 심어져 있다. 



이건 두개의 건물 지붕을 제거하고 찍은 모습이다. 



건물 뒷편에는 저렇게 휴지통이 놓여있고 그 옆에 쥐가 찍찍 거리고 있다. ^^;;


지후하고 같이 조립하느라 꽤나 오래 걸렸지만 오랜만에 건물 조립에 나도 재미 있었다. 이런 대형 건물들은 놓을 장소가 마땅치 않아서 상자안에 고이 모셔두고 있는데.. 언제쯤 다 조립을 해볼 수 있을지.. 모든 건물들을 다 조립해서 진열해 놓고 싶은데 정말 아쉽다. 레고의 끝판왕은 집 크기(레고 진열 장소때문에..) 라는게 괜히 나온 말이 아닌것 같다. 

728x90
반응형

'Enjoy Life > Lego' 카테고리의 다른 글

[21313] 병속의 배  (0) 2021.01.06
[42093] 레고 쉐보레 콜벳 ZR1  (0) 2020.03.17
[31068] 레고 크리에어터 모던 홈  (0) 2019.01.13
[10242] 레고 크리에이터 미니쿠퍼  (0) 2018.12.16
[10258]레고 런던버스  (0) 2018.06.28
반응형

작년 12월 마지막 날에 부랴부랴 레고 공홈에서 레고를 하나 구매를 했다. 적립해놨던 내 레고 공홈 포인트가 2년이 지나는 시점이어서 소멸되기 때문이었다. 15000원 정도 있어서 무엇을 구매를 할까 고민을 했다. 월 말이라서 그런지 인기있는 것들은 이미 품절이 되고 없었다. 

그래서 결국 이렇게 크리에이터 시리즈를 구매하기로 결정을 했다. 3가지 종류로 변형이 되는 이 시리즈가 그래도 가성비가 좋아서 선택을 했다.



우선 여기 글에서는 박스 메인에 있는 모습으로 만들어 보기로 했다. 브릭 수가 그렇게 많지 않아서 인지 지후가 혼자 조립을 제법 잘 했다.



전체적은 구성품을 보면 미니피규어 2개에 자동차도 있고 강아지도 있고. 아마도 저 자동차는 전기 자동차 인것 같다. 그래서 저렇게 옆에 충전 하는 곳이 집에 붙어 있다. ^^ 2층 집에 천장도 오픈이 된다. 바닥에는 트램플린도 있다. 집 밖에 전등과 나무들도 아기자기하게 잘 꾸며져 있다.



뒷모습은 이렇게 뻥 뚫려있다. 위에서 말했듯이 2층 천장은 오픈이 된다. 집 안에는 침대도 있고 소파와 의자도 놓여있다.  



그런데 이번 집 시리즈의 특징은 전체적은 구성들이 모듈화 되어있다는 것이다. 집을 덩어리로 분해를 하면 위 사진처럼 분리가 된다. 박스에 있는 모습처럼 3가지 모습도 있지만 한가지 모습에서 저런 모듈들을 어떻게 결합 하느냐에 따라서 또다른 모습으로 변형이 가능하다. (정말 레고 디자이너들은 머리가 좋은것 같다.)


똑같은 구성품들은데 이렇게 배치만 변경을 하면 다른 느낌으 3층 집으로도 만들 수 있다. 각 모듈들을 이리저리 배치해보는 재미가 또 있었다.



설명서에도 이렇게 모듈들을 분리해서 다른 형태로 만들어가는 모습을 알려주고 있다.



그리고 더 대박인것은 이런 집 시리즈를 다른것들은 연결해서 또 구성을 할 수 있다는 것이다. 크리에이터 시리즈들 중에서 집으로 구성된 것들은 모듈러 이외에는 구매하지 않으려고 했는데.. 왠지 이것을 보면 나머지 2개도 언젠간 구매를 해야 될것 같다는 생각이 들었다. ^^;;


728x90
반응형

'Enjoy Life > Lego' 카테고리의 다른 글

[42093] 레고 쉐보레 콜벳 ZR1  (0) 2020.03.17
[10218] 레고 펫샵  (0) 2019.01.19
[10242] 레고 크리에이터 미니쿠퍼  (0) 2018.12.16
[10258]레고 런던버스  (0) 2018.06.28
[10220]레고 폭스바겐 T1 캠퍼밴  (0) 2018.04.25
반응형


한빛 미디어에서 진행하는 "나는 리뷰어다"  를 통해서 "아무것도 모르고 시작하는 인공지능 첫걸음" 책을 받게 되었다.  요즘 인공지능, 빅데이터, 딥러닝 등등 AI 관련된 내용들이 굉장히 핫해서 대체 무슨 내용들일까라 궁금증이 생겨 책을 선택하게 되었다. 


먼저 목차를 보면 다음과 같다. 


chapter 1 지능이란 무엇일까?

chapter 2 인공지능의 기초지식을 배워보자

chapter 3 인공지능에게 탐색을 시켜보자

chapter 4 인공지능에게 지식을 가르쳐보자

chapter 5 인공지능을 학습시켜보자

chapter 6 웹사이트&이메일의 구조 이해하기

chapter 7 인공지능과 대화를 해보자



첫걸음이라는 책 제목처럼 아주 기초적인 지식부터 시작을 한다. 인공지능을 말하기 전에 먼저 알아야 하는 내용들을 자세하지만 쉽게 설명을 해놨다. 소설책 읽듯이 읽으면 되고 작가가 던지는 질문에 대해서는 머리로 한번 생각해 보면 될 정도의 내용들이 앞부분에 소개된다. 



위에 사진에서 처럼 내용에 들어가기에 앞서서 독자에게 무언가 관련된 내용에 대해서 생각해볼 거리를 던져준다. 그리고 독자들에게 생각한 것을 적어볼 수 있는 공간도 마련되어 있다. 예전에 학교 다닐때 풀었던 국어 문제집이 생각이 났다. 



한 chapter 가 종료될 때마다 요약내용이 있어서 볼수 있어서 읽었던 내용들을 다시 생각해볼 수 있다. 간단하게 요약이 되어있지만 중요한 부분은 다 들어가있다.


chapter 마지막에는 이렇게 연습문제도 있다.



그리고 내가 이 책을 읽으면서 책 내용을 이해하는데 많이 도움을 받은 부분들이 있다. 




우선 알고리즘에 대해서 설명을 하는 부분을 살펴 보자. 다른 책들 처럼 이 책에서도 그림을 이용해서 설명을 해준다. 그림에는 번호가 붙어있고 그 번호에 대한 설명이 책 페이지를 채우고 있다. 그런데 추가적으로 표를 이용해서 설명을 더해주고 있다. 이 부분은 글로 설명해놓은 것보다 눈에 확 들어와서 내가 알고리즘에 대한 내용을 쉽게 이해할수 있었다. 


책을 읽으면서 아쉬운점이 있었다면 바로 용어에 대한 부분이었다. 위 사진에도 보면 "너비 우선 탐색" 이라고 써있다. 영어로는 Breath First Search (BFS) 로 쓴다. 이렇게 한글 뿐만 아니라 영어로도 알려줬으면 더 좋을것 같다라는 생각이 들었다. 


728x90
반응형

+ Recent posts