* LFF(Layered Feed-Forward neural network) : 다층 피드 포워드 신경망

 - 퍼셉트론은 선형분리가 불가능한 문제에 대해서 해결을 해지 못했다.

 - 이러한 문제를 해결 하기 위해서 나타난 것이 LFF이다.

 - LFF는 선형분리가 불가능한 문제를 나누기 위해서 여러개의 직선으로 층을 나눠서 문제해결을 시도한다.

  ex) 퍼셉트론으로 풀지 못한 XOR문제를 LFF, 2개의 층으로 이뤄진 신경망을 이용하여 해결이 가능하다. 

   LFF0.png 

 - LFF는 하나의 입력층과 하나 이상의 은닉층, 하나의 출력층으로 이뤄져 있다. 

 - 이름에서 나타 났듯이 입력층, 은닉층, 출력층 등으로 층이 나눠져 있으며, 앞으로만 전진이 가능한 단방향 뉴런 네트워크다.

   lff_2hidden1.png 

  > 입력층 : 계산과정 없이 외부로 부터 신호를 받아들이는 지점

  > 은닉층 : 계산 뉴런들로 이뤄져 있다. 이론적으로는 하나의 은닉층만 있어도 모든 함수가 표시 된다.

                 문제의 특성 및 원하는 결과 등에 따라 여러개의 은닉층이 존재 할 수 있다. 이는 반복되는 실험으로 밝혀야 한다.

  > 출력층 : 계산 뉴론들리 이뤄져 있으며, 최종 계산 결과를 출력 신호로 내보낸다.

 - 활성화 함수로는 sigmoid함수를 사용한다.


* LFF의 학습 방법

 - LFF 학습은 BP algorithm을 통해서 실시된다.

  lff_info2.png 


ⓐ Step 1 : 초기화 단계

 - 각 가중치와 각 뉴런에서의 임계값을 ( -2.4/뉴런의 총개수 , 2.4/뉴런의 총개수 ) 범위에서 모두 지정해준다.


ⓑ Step 2 : 활성화

 1) 입력층에서 은닉층으로 가는 값을 계산한다.

 yjp3.png 

 2) 은닉층에서 출력층으로 가는 값을 계산한다.

 yjk4.png 

ⓒ Step 3 : 가중치 학습

  ※ 오차 기울기 : 활성화 함수의 미분값에 뉴련 출력의 오차를 곱한 것. 기호 : δ

  1) 출력층에서 출력층 이전 은닉층 사이에는 다음을 사용한다.

   > 출력값과 기대값의 오차를 바로 사용할 수 있다.

   ele5.png 

  2) 은닉층에서 은닉층 또는 입력층으로 가는 사이에는 다음을 사용한다.

   > 오차를 바로 사용하지 못하므로, 이전 단계에서 자신에 의해 발생한 오차를 모두 더하여 사용한다.

             ele6.png 

ⓓ Step 4 : 반복

  p값을 증가 시켜가며, 한 에폭이 모두 에러가 0이 나올때까지 ⓑ로 돌아간다.

  

 - LFF에서 기대치는 각각에서 발생한 오차제곱의 합이 어느 특정 수치보다 작을 때까지 반복한다.

 ※ 오차 제곱의 합 : 신경망의 성능을 보여주는 지표, 오차 제곱의 합이 충분히 작으면 신경망이 완성됬다고 할 수 있다.

 - ANN의 결과는 쓸만해 이기 때문에 유일하지 않다.(많은 실험을 통해서 최적화를 해나가야 한다.)


* LFF 가속학습

 - LFF의 학습속도를 빠르게 하기 위해 다음을 사용한다.

 ⓐ 쌍곡 탄젠트

   - 시그모이드 함수를 사용하지 않고 쌍곡 탄젠트 함수를 사용한다. 

      tan6.png 

  - 쌍곡 탄젠트 함수는 a와 b값이 상수로 정해지지 않았기 때문에 잘 사용하는 방법은 아니다.

 ⓑ 운동량 항

  - 가중치를 보정할 때 이전 단계의 가중치 변화량에 운동량 상수를 곱하여 변화를 더욱 빠르게 해주는 방법이다.

    ele7.png 

  - 파란색 글씨로 칠한 것은 이전 가중치 변화량이며, 베타는 운동량 상수이다.

  - 이는 물리의 관성 법칙에 의거해서 나온 방법이다. 

  - 운동량 항을 적용하면 오차제곱의 합이 원하는 수치까지 가는데 필요한 계산 횟수가 줄어들게 된다.

 ⓒ 학습률 알파값을 유동적으로 한다.

  - 가중치 값을 학습할 때 가중치의 부호가 급변하는 것을 막기 위해서(변하는 폭을 줄이기 위해서) 적용한 것이 알파값이다.

  - 만약, 가중치 값의 부호가 줄어들지 않으면, 점차 알파값을 증가시킨다.

  - 만약, 가중치 값의 부호가 연속적으로 엇갈리면, 알파값을 줄여나간다.

  - 학습률의 변화가 프로그램에 쇼크를 주지 않는 한에서 변화가 지속적으로 이뤄지기 때문에 필요 계산횟수이 줄어들게 된다.


저작자 표시 비영리 변경 금지

Posted by 구름여행 Cloud Trave

http://destiny738.tistory.com/456

* 퍼셉트론

 - 계단 함수 또는 부호함수를 사용하여 만들어진 단순한 뉴런

 - 퍼셉트론에서는 초평면과 선형분리 개념이 적용된다.

  > 초평면 : N차원 공간을 두개의 영역으로 나누는 평면

  > 선형분리 : 값의 분포를 2개로 나눠지는 평면이 존재하면, 선형분리가 가능하다라고 한다.

 - 선형분리가 가능해야지 퍼셉트론으로 표현이 가능하다.


 ex1) AND

0.PNG 

   > 녹색선과 빨간색선은 모두 2차원 공간을 2개로 나누는 초평면이다.

   > 녹색선으로 만들어진 함수는 AND를 나타내기 위해 부적합하다.

   > 붉은선으로 만들어진 함수는 AND를 나타내기에 적합하다. 또한 붉은선에 의해서 상태가 나눠지므로,

      선형분리가 가능하다.

   > 이는 퍼셉트론으로 계산이 가능하다.

 

 ex2) XOR

  1.PNG 

   > 어떠한 초평면으로도 XOR을 만족시키는 것이 없다.

   > 이는 선형분리가 불가능하며, 퍼셉트론으로 계산이 불가능하다.


* 퍼셉트론의 학습규칙

 - 퍼셉트론의 학습은 오차율을 계산해내어, 입력값의 비율 만큼 가중치 값을 조종한다.

 - 다음과 같은 AND연산을 위한 퍼셉트론에서 (x1, x2)가 (1, 1)이 들어 왔을 때,

   가중치 값을 변경해 나가는 것을 보며 학습규칙을 설명하겠다.

 2.PNG 

  1) 현재 들어 온 값과 Step함수를 이용해 Y값을 구한다.

     f(X1*W1 + X2+W2 - θ ) = f(1*0.2 + 1*(-0.1) - 0.2 ) = f( - 0.1) = 0 (Step 함수는 0보다 클 경우 1을 작을경우 -1을 출력)

  2) (1, 1)이 들어 왔을 때에 기대 값은 1이므로, 오차 "1"이 발생한다.

   > e = Yd - Y ( Yd : 목표치 / Y : 현재치 )

  3) 오차가 발생했기 때문에 보정을 해준다. 이 보정은 다음의 식을 따른다.

   > Wi(next) = Wi(current) + a * Xi * e // 다음 가중치 = 현재 가중치 + 보정치 * 입력값 * 오차 // a = 0.1 

     ( a는 0과 1사이의 값으로 학습률을 나타낸다. 이 값은 Wi값이 적정치로 가는데 값의 변화의 폭을 줄이기 위해서 필요하다. )

   > 위 식에 따라 W1(next) = 0.2 + 0.1 * 1 * 1 = 0.3, W2(next) = -0.1 + 0.1 * 1 * 1 = 0.0으로 계산된다.

 - 위와 같은 형식으로 가중치 값을 학습해나간다. 이는 오차를 누가 더 많이 발생했느냐에 따라서 가중치 값의 변화도 변한다.

 - 위 과정은 가능한 모든 입력치에 대해서 모두 실행했을때 모두 오차가 나지 않을 때 까지 반복한다.

  > 하나의 입력치 뭉치를 에폭이라고 하며, 가중치 값을 한번 변화하는 과정을 P값을 이용해 나타낸다.

 - 위에서 알아본 퍼셉트론의 학습규칙을 일반화하면 다음과 같다.


 ⓐ Step 1 : 초기 가중치 값 및 임계값(θ)를 임의의 값으로 부여한다. 여기서 θ와 W값은 -0.5~0.5 사이를 만족시키도록 한다.  

                 또한 P값을 1로 Setting한다. 또한, 정한 학습률을 저장시킨다.(슈도코드에선 0.1로 선택)

     >> Pseudo Code 

     theta = Random[-0.5,0.5];                                    // Set the theta value( threshold )

     for ( i = 0 ; i < n ; i++ ) W[i] = Random[-0.5,0.5];    //  Set the W[i] value( weight )

     p = 1;                                                                //  Set the P value ( Proceed number )

     assistant = 0.1;                                                   //  Set the a value


 ⓑ Step 2 : 활성화 함수와 theta값을 이용하여 Y(p)값을 산출해난다.

                 3.PNG 

    >> Pseudo Code

    sum = 0;                                                             // sum  value of Xi * Wi

    result;                                                                // Value of Y(i)

    // Calculate Step Function

    for ( i = 0 ; i < n ; i++ ) sum += x[i]*w[i];                // sum of Xi * Wi

    sum -= theta;                                                      // Minus threshold value

    if ( sum > 0 ) result = 1;                                        

    else result = 0;


 ⓒ Step 3 : 다음 식을 이용하여 가중치 보정을 실시한다. 에러가 발생하지 않았다면 Step 4로 간다.

               4.PNG 


    >> Pseudo Code

    error = expectation[p] - result;

    if ( error != 0 ){

        for ( i = 0 ; i < n ; i++ ) w[i] += assistant * x[i] * e;

    }

 ⓓ Step 4 : 한 에폭을 실시하는 동안 에러가 나지 않는 다면 종료, 하나라도 에러가 났다면 Step 2로 돌아간다.


* 퍼셉트론의 한계

 - 선형분리가 불가능한 문제에 대해서 해결 할 수 없었다.(XOR)

 - 이러한 문제를 풀기 위해서 나온 것이 다층 피드 포워드 신경망이다.

저작자 표시 비영리 변경 금지
Posted by 구름여행 Cloud Travel
http://destiny738.tistory.com/455

* 기계 학습

 - 주변 환경 및 데이터를 통해서 공통점을 뽑아 내는 것

 - 학습 능력에 의해서 지능형 시스템의 성능은 개선되어 간다.

 - 대표적인 방법 : 유전알고리즘(Genetic algorithm), 인공신경망(Artificial Neural Network)


* 신경망

 - 뇌 : 서로 연결된 신경 세포의 집합

 - 신경세포(Neuron) : 정보처리 단위

 - 여러개의 뉴런을 병렬처리 함으로써 인간은 어떤 컴퓨터보다 빠르게 그 기능을 수행할 수 있다.

 - 복잡하며, 비선형적이고, 병렬적인 처리가 가능하다.

 - 인공신경망 : 인간의 뇌를 부분적으로 흉내낸 것


* 인공신경망의 모델

 - 사람 신경망의 단순화 : 여러가지 데이터를 합쳐서 처리를 한후 다음 노드로 결과를 전달

 - 가중치가 있는 링크들의 연결로 이뤄진다.

 - 각각의 뉴런은 여러 뉴런에게 데이터를 받지만, 단하나의 결과만을 낸다.

   %EB%89%B4%EB%9F%B0.png 

 - 각각의 신호값을 가중치와 곱한 값들의 합과 뉴런이 가지고 있는 한계치와 비교한다.

 - 간단한 경우 한계치를 넘어서면 1을 그렇치 않다면 -1을 출력하여 다음 노드로 전달한다.


* 인공신경망의 학습 : 반복적인 조정으로 학습을 실시한다.


* 활성화 함수(Activation function)

 - 결과값을 내보낼때 사용하는 함수

 - 전이 함수라고도 한다.

 ⓐ 계단함수

  - 한계치를 넘으면 1을 출력 그렇지 않으면 0을 출력

 ⓑ 부호함수

  - 한계치를 넘으면 1을 출력 그렇지 않으면 -1을 출력

 ⓒ 시그모이드 함수

  - X에 따라 Y값을 계산한다

  - Y는 0~1값을 갖는다.

  %EC%8B%9C%EA%B7%B8%EB%AA%A8%EC%9D%B4%EB%93%9C%ED%95%A8%EC%88%98.png 

 ⓓ 선형함수

  - Y = X

  - 크게 의미가 없다.

 ⓔ 쌍곡 탄젠트 함수

  - 시그모이드 함수를 변형하여 갖는 값을 -k~k사이로 바꾼 함수. (k는 a, b값에 의해 달라진다)

  - 시그모이드 함수보다 빠른 학습을 위해서 사용되는 함수

  %EC%8C%8D%EA%B3%A1_%ED%83%84%EC%A0%A0%ED%8A%B8_%ED%95%A8%EC%88%98.png 

 - ⓐ와 ⓑ는 흑백 논리로서 사람이 생각하는 것과 다르다

 - ⓒ, ⓔ를 주로 많이 사용한다. 가중치 값을 학습해나가는데 에러가 더 적게 나도록 도와준다.


저작자 표시 비영리 변경 금지
Posted by 구름여행 Cloud Travel

http://destiny738.tistory.com/454

자율학습의 한갈래로 클러스터링 과 ICA 가 있다. 아래는 ICA 에 대한  짧은 소개이다.(자율 학습(Unsupervised Learning) 기계 학습 일종으로데이터가 어떻게 구성되었는지를 알아내는 문제의 범주에 속한다 방법은 지도 학습(Supervised Learning) 혹은 강화 학습(Reinforcement Learning)과는 달리 입력값에 대한 목표치가 주어지지 않는다.)


Independent Components Analysis

Introductory Overview

Independent Component Analysis is a well established and reliable statistical method that performs signal separation. Signal separation is a frequently occurring problem and is central to Statistical Signal Processing, which has a wide range of applications in many areas of technology ranging from Audio and Image Processing to Biomedical Signal Processing, Telecommunications, and Econometrics.

Imagine being in a room with a crowd of people and two speakers giving presentations at the same time. The crowed is making comments and noises in the background. We are interested in what the speakers say and not the comments emanating from the crowd. There are two microphones at different locations, recording the speakers' voices as well as the noise coming from the crowed. Our task is to separate the voice of each speaker while ignoring the background noise (see illustration below).

This is a classic example of the Independent Component Analysis, a well established stochastic technique. ICA can be used as a method of Blind Source Separation, meaning that it can separate independent signals from linear mixtures with virtually no prior knowledge on the signals. An example is decomposition of Electro or Magnetoencephalographic signals. In computational Neuroscience, ICA has been used for Feature Extraction, in which case it seems to adequately model the basic cortical processing of visual and auditory information. New application areas are being discovered at an increasing pace. 




소스 : https://documents.software.dell.com/statistics/textbook/independent-components-analysis  


집단 지성 프로그래밍이라는 책을 정리해본다.  (http://www.yes24.com/24/goods/2917663?scode=032&OzSrank=1) 

이 책은 머신러닝의 기본이되는 내용을 훌륭히 소개하고 있는 꽤 유명한 책이다. 각 챕터의 핵심만 정리한다. 


순서 

1. 집단지성 소개

2. 추천시스템 만들기

3. 군집발견

4. 검색과 랭킹

5. 최적화

6. 문서필터링

7. 의사결정트리

8. 가격 모델링

9. 고급분류기법 : 커널기법과 SVM

10. 독립특성 발견 

11. 진화지성

12. 알고리즘 요약  




1. 협업 필터링 

괜찮은 영화를 선택할때 , 보통 주변 친구들한테 물어보는 방법을 사용하기도 한다.

협업 필터링 알고리즘은 큰 무리의 사람들을 검색해서  나와 비슷한  취향의 작은 집합을 발견한후에  

그 집합에서의 선택을 결합해서 목록을 만든다 

처음에 협업필터링은 제록스의 데이비드 골드버그가  문서에 흥미있음 또는 흥미없음이라는 주석을 달도록해서 

다른사람이 문서를 검색할때 필터링에 이용되도록 하는 논문에서 처음 사용됬다. 


2. 선호 정보 수집  

파이썬을 이용하여 정보를 수집해보자.  중첩 딕셔너리를 사용하는데 다음과 같다.

critics = { 'Lisa Rose' : {'Lady in the water' : 2.5, 'Superman Returns' : 3.5},

               'Gene Seymour' : {'Lady in the water' : 1.5, 'Superman Returns' : 3.0},

               ....}


 평론가별 영화 평가 목록이다. 

비슷하게 쇼핑싸이트 경우는 구매한경우 1, 그렇지 않은경우 0 을 사용할수도있고, 

뉴스기사에 -1 싫어함, 0 모름 , 1 좋아함으로 평가할수도있다.


3. 유사 사용자 찾기  

- 유클리디안 거리점수

    : sqrt (pow (3.5 - 3.0 , 2) + pow (2.5 - 1.5, 2) ) ; 

      위의 선호정보수집에서 두 평론가 사이의 유사성은 이렇게 거리를 계산하여 찾을수있다.

- 피어슨 상관점수 

    유킬리디안 거리점수의 문제는 두 평론가의 영화 취향에 대한 유사성이 비슷한데 , 

    한사람은 굉장히 짜서 만약 3가지 영화에 대해서 1,2,3 이렇게 점수를 매기고  

    다른사람은 점수를 후하게 주어서  3,4,5 이렇게 줬다고하자. 두명은 사실 취향이 비슷한건데

    유킬리디안식으로 하면 2씩의 거리차이가 난다. 따라서 피어슨 상관점수는 이럴경우 더 잘맞는 공식이다.

    최적 맛춤선 ( best - fit line) 이 유사한 선호도를 가진 사람끼리는 한 직선으로 잘 표현된다.   

- 유사도 측정 지표 선택 방법 

   위의 2가지 말고도 다양한 유사도 측정 방법이 많다. 함수에 옵션으로 선택하게 할수있다.


위와 같이 유사사용자를 찾기위해서는 먼저  항목을 수치화 하는게 중요하다는것을 알수있다. 


4. 항목 추천  

 위의 유사사용자찾기에서 나와 취향이 비슷한 평론가를 찾은후에 그 사람이 높게 평가한 영화중 내가 안본 영화를 찾는것이 가장  손쉬운 선택이지만, 이건 너무 관대한 판단이다.  다음 방법을 사용해보자

# 다른 사람과의 순위의 가중 평균값을 이용해서 특정 사람에 추천 

def getRecommendations(prefs,person,similarity=sim_pearson):

  totals={}

  simSums={}

  for other in prefs:

    # 나 자신과 비교하지 말것 

    if other==person: continue

    sim=similarity(prefs,person,other)


    # 0 이하의 점수는 무시 

    if sim<=0: continue

    for item in prefs[other]:

   

      # 내가 보지 못한 영화만 대상 

      if item not in prefs[person] or prefs[person][item]==0:

        #  유사도 * 점수 

        totals.setdefault(item,0)

        totals[item]+=prefs[other][item]*sim

        # 유사도 합계 

        simSums.setdefault(item,0)

        simSums[item]+=sim


  # 정규화된 목록 생성 

  rankings=[(total/simSums[item],item) for item,total in totals.items()]


  # 정렬 목록 리턴 

  rankings.sort()

  rankings.reverse()

  return rankings


5. 제품 매칭   

 지금까지 유사한 사람을 찾는 방법 과 한 사람에게 영화를  추천하는 방법을 보았다. 이제는 한 제품과 다른 제품이 얼마나 비슷한지 살펴보자. 이런 기능은 쇼핑 웹 싸이트에서 자주 방문하지 않은 사람들에게 제공한다. 


6. 딜리셔스 링크 추천 기능 만들기 

 이절에서는 가장 인기있는 온라인 북마크 싸이트 중의 하나로부터 데이터를 추출하는 방법과 이 데이터를 활용해서 비슷한 사람  찾기 그리고 전에 본 적이 없는 링크를 추천하는 방법을 소개한다. 

 - 딜리셔스 API

 - 데이터 구축 

 - 이웃과 링크 추천 


7. 항목 기반 필터링 

 이제까지는 모든 사용자들이 평가한 랭킹 정보 데이터가 있어야 추천 엔진을 구현할수있었다. 이는 수천명의 사람이나 항목이 있을땐 잘 작동할것이다. 하지만 아마존과 같은 매우 큰 사이트의 경우에는 수백만의 고객과 제품이 있어 한 명을 다른 모든 사용자와 비교하고 각 사용자가 평가한 모든 제품과 비교하는 작업은 매우 느리게 동작할것이다. 또 수백만가지의 제품을 가진 싸이트에서는 사람간의 중첩이 거의 없어 유사한지 결정하기 까다롭다.

이제까지 사용한 방법은 " 사용자 기반 협력 필터링 (user-based collaborative filtering) " 이고 

이제부터는 "항목 기반 협력 필터링 ( item -based collaborative filltering) "을 살펴보자.  매우 큰 데이터셋을 다룬다면 이게 더 좋은 결과를 나타낼것이다.


- 항목 비교 데이터 세트 생성 

- 추천 생성 


8. 무비렌즈 데이터 세트 이용하기  

 

9. 사용자 기반 필터링과 항목 기반 필터링 

사용자 기반 필터링 기법은 구현하기 용이하고 추가 단계가 없어, 자주 변경되는 보다 작은 메인  메모리안에 들어가는 데이터 세트에 적당하다.  



... 작성중 ...

 

집단 지성 프로그래밍이라는 책을 정리해본다.  (http://www.yes24.com/24/goods/2917663?scode=032&OzSrank=1) 

이 책은 머신러닝의 기본이되는 내용을 훌륭히 소개하고 있는 꽤 유명한 책이다. 각 챕터의 핵심만 정리한다. 


순서 

1. 집단지성 소개

2. 추천시스템 만들기

3. 군집발견

4. 검색과 랭킹

5. 최적화

6. 문서필터링

7. 의사결정트리

8. 가격 모델링

9. 고급분류기법 : 커널기법과 SVM

10. 독립특성 발견 

11. 진화지성

12. 알고리즘 요약  


1. 집단지성 소개


집단지성의 예 

- 위키디피아  :  사용자 공헌으로만 만들어지는 온라인 백과사전이다. 알고리즘에 의존하기보단 정보를 제공하는 사용자 기반                            에 의존. 

- 구글             :  특정웹페이지에  있는 정보(링크) 를 랭킹으로 정리하여 검색  결과순서를 정하는데 이용. 수집한 데이터를 가                            지고 새로운 결론을 만들어냄.  정교한 알고리즘을 사용해서 새로운 비지니스 기회를 창출함. 


- 인터넷이전에 금융시장도 다수개인들의 거래행위를 통해 가격이 결정되며 , 표본조사등은 개인보다는 그룹의 통계적 결론을 유도했었고 참가자들 사이에서 새로운 결론을유추하였다.


기계학습이란

기계학습은 주로 수학과 통계학에 기반을 두는데 , 단순상관분석 및 회귀분석도 기계학습의 분야이다. 컴퓨터가 스스로 학습하게 하는 알고리즘에 관련된 인공지능의 한 영역인데, 대부분의 경우 기계학습은 주어진 데이터의 집합을 이용해서 데이터의 속성에 관한 정보를 추론하는 알고리즘을 말한다. 

단순히 예를들어서 스팸을 필터링하기위해서는 스팸에 대한 데이터들이 필요하고, 이러한 데이터는 스팸이라는것을 알려주면 , 기계 스스로 스팸을 걸러내는 능력을 가지게 할수있다. 


기계학습의 한계

이 책에서 소개할 스팸필터링 기술은 단어나 구 출현 여부로 구현한다. 문장구조나 의미는 고려하지 않는다. 이론적으로는 가능하지만 알고리즘 개선에 드는 노력에 비해 문법 적용에 드는 노력이 훨씬 더 크기 때문이다. 

기계학습은 만능이 아니다. 전에 나타나지 않은 패턴의 경우 해석오류가 발생할 가능성이 크며 , 새로운 정보를 판단해야할경우 기존에 한번 경험한 데이터만을 기반으로 법칙화된다. 인간은 거대한 문화지식과 경험,유사상황인식력등을 활용하지만~


실제 예 

구글의 페이지랭킹 /  아마존이나 넷플릭스의 추천시스템  /  할리우드 주식거래소의 영화 성공에 대한 예측시장 /

e하모니는 참가자의 데이터를 수집하여 멋진 상대를 찾아준다. 


 기계학습의 다른 사례 

 생물공학 / 금융사기 검출 / 컴퓨터 비전 / 제품 마케팅 / 공급망 최적화 / 주식시장 분석 / 국가안보  





+ Recent posts