Let’s go!

  • 가 보지 않은 길

    가 보지 않은 길

    isbn: 9788930089050

    작가가 한국의 급격한 경제 성장의 원인을 찾기위해, 한국 경제와 가장 비슷한 구조를 가진 자동차 산업의 현대기아차를 분석했다. 자동차 산업이 다른 산업과 다르게 파급 효과를 크게 내고, 고용을 많이 한다. 한국 발전의 이유가 중산층의 부상이었고, 이런 중산층이 잘 살게 된 이유로 현대차의 성장으로 보았다. 현대기아차, 협력사 직원과의 인터뷰, 작가의 생각을 종합하여 현대차 발전의 이유가 열정, 조율, 소명이라 주장한다. 내가 그 주장을 거부할 이유도 없고, 대략 정확하다고 생각된다.

    어떻게 보면 이 책이 현대차의 과거, 현재, 미래를 설명한다. 한 개 기업을 분석할 경우, 과거부터 시작하지 않을 것이다. 내 경험으로 학자들이 동인도 회사 정도를 분석했지, 그 외는 잘 모르겠다. 이런 나의 상식이 약 50년 역사 기업을 자세하게 분석한 이유가 다른 원인이라 의심하게 한다. 역사적 당위성을 확인하기 위한 정도?

    작가가 마지막에 중산층의 생각이 변해야 한국이 한 단계 도약한다고 주장한다. 현재 현대차 대부분 직원같이 불합리한 관행을 용인하고, 노동 운동의 역사적 의미를 알지 못하고 단순 임금 증액만을 위해 투쟁한다면, 회사, 국가 경쟁력 하락이 명확하다. 시민 사회의 적절한 구성원으로 책임을 느끼고 주변에 일들에 대한 관심을 갖고, 불합리한 상황을 적극적으로 없앨 경우 한국 사회가 도약한다 주장한다.

    블루 컬러, 화이트 컬러 구분없는 나라가 한국, 일본 정도라고한다. 좀 의외이다. 영국도 블루 컬러만의 단어가 귀족의 그것과 다르다고 한다. 내가 겪어본 멕시코가 더 확실해 보이고.

  • 에너지의 미래

    에너지의 미래

    isbn: 9788962630299

    책이 출간된 지 8년이 지난 지금, 책이 소개한 기술 중 하나가 다른 경쟁자를 압도하지 않는다. 내 예상으로는 2차 전지, 수소, 핵융합으로 넘어 갈 듯하다. 책이 지구 온난화를 더 이상 논란의 여지가 없는 사실이라 못 박았는데, 2018년 아직도 그것이 음모라 하는 사람들이 있다.

    바이오 에탄올이 친환경 에너지원으로 브라질에서 많이 사용 된다는데, 그 효율이 태양전지보다 경쟁이 안될 정도로 낮아 사용하면 안된다고 했다. 그 이유로 그것이 식량과 경쟁하여 식량난을 일으키고, 식량이 부족할 경우, 생산을 늘리기 위한 비료가 온실가스를 발생시킨다는 들었다.

    그러나 바이오 에탄올(지금 경쟁력이 떨어지는 자원)의 연구를 하지 말자고 확신하지는 않는다. 식물이 CO2를 가두는 방법 중 하나로 활용될 수 있기 때문이다. 수소가 차세대 에너지 원이 확실해 보인다. 그러나 태양 전지, 바이오 에탄올, 바이오 매스, 조력 발전 등 다양한 에너지원이 경쟁하는 구도가 중요하다. 이런 자세가 새로운 일에 대한 올바른 접근 방법이다. 기술이 개발되면 어디에, 어떻게 사용될 줄 모르기 때문에 그 즉시 그것의 가치를 판단해서는 안된다.

    핵융항 발전이 매력적인 차세대 에너지원이나, 아직도 극복해야할 장애물들이 많다. 2100년이나 상업적인 개발이 가능하다 예상되니, 내 생에는 상업용 핵융합 발전소가 만드는 전기를 사용할 수 없어 보인다.

    전체적으로는 내용이 어렵다. 특히 화학의 기초가 없는 나는 그냥 대충 넘어간 기분이다. 뭐 세부 내용이 중요하다고 판단되지 않지만.

  • Monte Carlo Method 코드 분석

    여기에 있는 코드 참조..
    책은 “파이썬과 케라스로 배우는 강화학습” 내용.

    Monte Carlo Method의 코드가 설명되어 있지 않아, python 디버그로 그 결과를 잠깐 살폈다.

    메인 코드.

    # 메인 함수
    if __name__ == "__main__":
        env = Env()
        agent = MCAgent(actions=list(range(env.n_actions)))
    
        for episode in range(1000):
            state = env.reset()
            action = agent.get_action(state)
    
            while True:
                env.render()
    
                # 다음 상태로 이동
                # 보상은 숫자이고, 완료 여부는 boolean
                next_state, reward, done = env.step(action)
                agent.save_sample(next_state, reward, done)
                ##테스트용.
                print(agent.samples)
                print("\n")
    
                # 다음 행동 받아옴
                action = agent.get_action(next_state)
    
                # 에피소드가 완료됐을 때, 큐 함수 업데이트
                if done:
                    print("episode : ", episode)
                    agent.update()
                    agent.samples.clear()
                    break
    

    6번행: episode를 1,000번 반복.
    10번행: 무한번 반복이나, 25번 결과를 보고 break 결정. done은 15번 행에서 업데이트.

    (Pdb) l
    109                 # 보상은 숫자이고, 완료 여부는 boolean
    110                 next_state, reward, done = env.step(action)
    111                 agent.save_sample(next_state, reward, done)
    112                 ##테스트용.
    113                 print(agent.samples)
    114  ->              print("\n")
    115     
    116                 # 다음 행동 받아옴
    117                 action = agent.get_action(next_state)
    118
    119 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    (Pdb) l
    120 if done:
    121 print("episode : ", episode)
    122 agent.update()
    123 agent.samples.clear()
    124 break
    [EOF]
    (Pdb) p agent.samples
    [[[0, 0], 0, False], [[0, 1], 0, False], [[1, 1], 0, False], [[1, 2], -100, True]]
    (Pdb)
    
    

    에피소드가 끝나면, 자신이 방문한 모든 셀을 list로 기억.
    아래 좌표 중, 행과 열이 바뀜.

    22번행: 현재 스테이트에서 다음 스테이트를 예측.

    (Pdb) l
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32  ->                  value = self.value_table[state]
     33                     ##테스트..
     34                     print("Value is ",value)
     35                     self.value_table[state] = (value +
     36                                                self.learning_rate * (G_t - value))
     37     
    (Pdb) 
     38                     print("Value state is", state)
     39                     #print("type of value_table is", type(self.value_table))
     40                     print("Value table is", self.value_table)
     41                     #print("Value table is",self.value_table[state])
     42     
     43                     print("\n")
     44     
     45         # 큐 함수에 따라서 행동을 반환
     46         # 입실론 탐욕 정책에 따라서 행동을 반환
     47         def get_action(self, state):
     48             if np.random.rand() < self.epsilon:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(34)update()
    -> print("Value is ",value)
    (Pdb) n
    Value is  0.0
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(35)update()
    -> self.value_table[state] = (value +
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(36)update()
    -> self.learning_rate * (G_t - value))
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(38)update()
    -> print("Value state is", state)
    (Pdb) 
    Value state is [1, 2]
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(40)update()
    -> print("Value table is", self.value_table)
    (Pdb) 
    Value table is defaultdict(<class 'float'>, {'[0, 0]': 0.0, '[0, 1]': 0.0, '[1, 0]': 0.0, '[1, 2]': -0.9, '[2, 1]': 0.0, '[1, 1]': 0.0, '[1, 3]': 0.0, '[0, 2]': 0.0, '[2, 2]': 0.0})
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(43)update()
    -> print("\n")
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 0.0, '[0, 1]': 0.0, '[1, 0]': 0.0, '[1, 2]': -0.9, '[2, 1]': 0.0, '[1, 1]': 0.0, '[1, 3]': 0.0, '[0, 2]': 0.0, '[2, 2]': 0.0})
    (Pdb) 
    
    

    self.value_table을 각 state 관리. 방문한 state를 list로 추가하고, 각 value를 update. 나중에 현재 state를 보고 action을 산출 할 때 필요.

    update 하면 teminal state의 reward를 감가율로 계속 감소시켜 시작 스테이트까지 value_table[state]로 업데이트..

    아래 코드에서

    if state not in visit_state가 있기 때문에, 처음 방문한 state만 관심을 갖음.

     19        # 메모리에 샘플을 추가
     20         def save_sample(self, state, reward, done):
     21             self.samples.append([state, reward, done])
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24  ->      def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(25)update()
    -> G_t = 0
    (Pdb) p self.samples
    [[[1, 0], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) 
    ...
    (Pdb) l
     24         def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29  ->              if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32                     value = self.value_table[state]
     33                     ##테스트..
     34                     print("Value is ",value)
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(30)update()
    -> visit_state.append(state)
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(31)update()
    -> G_t = self.discount_factor * (reward[1] + G_t)
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(32)update()
    -> value = self.value_table[state]
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 10.523899590468769, '[0, 1]': 2.3971909843905967, '[1, 0]': 45.81574921045315, '[1, 2]': -2.67309, '[2, 1]': -19.99607765407679, '[1, 1]': 6.356969207767222, '[1, 3]': 0.0, '[0, 2]': -0.41447951099999986, '[2, 2]': 89.22430756838313, '[2, 0]': 50.92319972091863, '[3, 0]': 60.0913655106793, '[3, 1]': 66.88710703917133, '[0, 3]': -0.7290000000000001, '[0, 4]': -0.6561000000000001, '[1, 4]': 0.0, '[4, 0]': 8.302503491918047, '[4, 1]': 6.159613912118276, '[4, 2]': 6.304592658442578, '[3, 2]': 80.25132103821517, '[3, 3]': 6.970546731858152, '[2, 3]': 0.0, '[3, 4]': 0.6561000000000001, '[4, 3]': 0.0, '[2, 4]': 0.0, '[4, 4]': 0.0})
    
    

    500회 시행 후, 과거 이력을 보면 아래와 같다.

    (Pdb) p agent.samples
    [[[0, 1], 0, False], [[0, 0], 0, False], [[0, 1], 0, False], [[0, 0], 0, False], [[1, 0], 0, False], [[1, 1], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) l
    116                 # 다음 행동 받아옴
    117                 action = agent.get_action(next_state)
    118     
    119                 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    120                 if done:
    121 B->                  print("episode : ", episode)
    122                     agent.update()
    123                     agent.samples.clear()
    124                     break
    [EOF]
    (Pdb) n
    episode :  500
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(122)<module>()
    -> agent.update()
    (Pdb) l
    117                 action = agent.get_action(next_state)
    118     
    119                 # 에피소드가 완료됐을 때, 큐 함수 업데이트
    120                 if done:
    121 B                   print("episode : ", episode)
    122  ->                  agent.update()
    123                     agent.samples.clear()
    124                     break
    [EOF]
    (Pdb) s
    --Call--
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(24)update()
    -> def update(self):
    (Pdb) l
     19         # 메모리에 샘플을 추가
     20         def save_sample(self, state, reward, done):
     21             self.samples.append([state, reward, done])
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24  ->      def update(self):
     25             G_t = 0
     26             visit_state = []
     27             for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(25)update()
    -> G_t = 0
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(26)update()
    -> visit_state = []
    (Pdb) 
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(27)update()
    -> for reward in reversed(self.samples):
    (Pdb) p visit_state
    []
    (Pdb) l
     22     
     23         # 모든 에피소드에서 에이전트가 방문한 상태의 큐 함수를 업데이트
     24         def update(self):
     25             G_t = 0
     26             visit_state = []
     27  ->          for reward in reversed(self.samples):
     28                 state = str(reward[0])
     29                 if state not in visit_state:
     30                     visit_state.append(state)
     31                     G_t = self.discount_factor * (reward[1] + G_t)
     32                     value = self.value_table[state]
    (Pdb) p self.samples
    [[[0, 1], 0, False], [[0, 0], 0, False], [[0, 1], 0, False], [[0, 0], 0, False], [[1, 0], 0, False], [[1, 1], 0, False], [[1, 0], 0, False], [[2, 0], 0, False], [[3, 0], 0, False], [[3, 1], 0, False], [[3, 2], 0, False], [[2, 2], 100, True]]
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(28)update()
    -> state = str(reward[0])
    (Pdb) p state
    [0, 0]
    (Pdb) n
    > /home/now0930/tensorflow/reinforceLearing/reinforcement-learning-kr-master/1-grid-world/3-monte-carlo/mc_agentTest.py(29)update()
    -> if state not in visit_state:
    (Pdb) p state
    '[2, 2]'
    (Pdb) p self.value_table
    defaultdict(<class 'float'>, {'[0, 0]': 12.843038729477103, '[0, 1]': 3.6010347623049843, '[1, 0]': 45.739579013968516, '[0, 2]': 0.38742048900000015, '[1, 1]': 4.629255057991681, '[2, 0]': 50.83890751506551, '[2, 2]': 89.2397438477723, '[3, 1]': 66.85889829029591, '[2, 1]': -19.99607765407679, '[3, 0]': 60.06357418599044, '[4, 0]': 8.024660160565901, '[3, 2]': 80.26033687696258, '[4, 1]': 5.96080478456966, '[3, 3]': 6.970546731858152, '[4, 2]': 6.029123110357315, '[3, 4]': 1.3056390000000002, '[2, 4]': 0.47829690000000014, '[4, 4]': 0.5904900000000002, '[2, 3]': 0.81, '[4, 3]': 0.5314410000000002, '[1, 3]': 0.0, '[1, 4]': 0.0, '[1, 2]': 0.0, '[0, 3]': 0.0})
    

  • 기술 중독 사회

    기술 중독 사회

    isbn: 9788998156565

    글쓴이는 지구정도 크기의 문제를 해결하기 위해서, 기술보다는 사람들의 기초(의지, 구성원 등)가 중요하다고 말한다. 이런 결론은 너무나 당연하다. 어떤 의도, 어떤 과정, 누구와 일할지가 그 일의 성공, 실패 가능성을 결정한다. 좋은 학교에 입학하기 위해 치열하게 경쟁하는 이유도 훌륭한 친구들과 같이 공부하여 나의 성공 가능성을 높이려고 하기 때문이다.

    IT가 언제부터 첨단 기술을 대표하는지 모르겠다. 작가는 이 책에 자신의 경험으로 기술이 현재 후진국 발전이 필요한 나라?의 문제를 풀지 못한다고 주장한다. 정확하게 말하면, IT가 그들의 교육에 대한 무관심, 빈곤, 그리고 중동 국가들의 독재 정치 문제를 해결하지 못한다. 글쓴이가 IT 업무에 많은 경험이 있어 이런 예시는 인정하지만, IT 외 다른 기술들에 대한 예시가 없어, 저자의 전제에 동의할 수 없다.

    단순 노트북, PC만 필요한 IT와 달리, 다른 기술들은 어느 정도 크기의 자본이 필요하다. 소위 말하는 후진국이 이런 시도를 진지하게 했는지도, 선진국이 이런 기술들을 쿨하게 전달 했는지도 의문이다. 소위 인건비가 싼 나라에 공장을 짓고, 그 이익 대부분은 투자한 기업이 가져가는 형태로 되었고, 작가가 일했던 마이크로소프트 역시 인도의 인재들로 부를 얻을 수 있었다. 선진국이 후진국을 착취하는 형태의 지금, 왜 후진국이 선진국처럼 될 수 없는가를 논하는 꼴이다.

  • 돈의 품격

    돈의 품격

    isbn: 9791195372928

    아, 리뷰를 안 쓸려고 했는데, 나쁜 책도 책이기 때문에 간단히 정리한다. 사는데 돈과 관련된 문제가 없다면 읽지 않아도 되는 책. 환자들을 위한 책. 다행히 나는 해당 사항이 없다.