Linear algebra 선형대수 야나두 딥러닝
numpy 기초 브로드캐스팅, array, arange, indexing, slicing 야나두 딥러닝
교차 검증 (cross validation) 야나두 딥러닝
가중치 규제 (regularization) L1, L2 란 야나두 딥러닝
과대적합을 해결 하는 대표적인 방법 중 하나인 가중치 규제(regularization) 이다. 가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한 하는 기법이다. 가중치를 규제하면 모델의 일반화 성능이 올라간다.
아래 경사가 급한 것과 낮은 그래프 특정 샘플에만 적용 하는 사례를 보여 준다. 즉 가중치를 제한 하면, 모델 몇 개의 데이터에 집착하지 않는다.
검증세트 분할, 데이터 스케일 과적합 및 모델 튜닝
과적합 및 모델 튜닝에 대하여..
검증 세트 분할
로지스틱 회귀 뉴런으로 단일층 신경망
신경망 이야기 하게 되면, 제프리 힌튼 교수 처음 강의에 뉴런에 대해서 나온다. 한국어로 번역이 가능 한데, 음성을 영어로 인식 한 다음에 번역한 다음에 한국어로 나오게 할 수 있다.
즉 사람의 뇌의 구조는 복잡하게 되어 있다는 데 뉴런이 10^10개 100억개가 있다고 한다. 생물학적인 성격의 설명이 있는데, 직접 동영상을 보는 것이 좋을 것 같아서 링크하였다.
1. 일반적인 신경망
유방암 데이터 세트 (Wisconsin breast cancer dataset)
제조업에는 금융하고, 의학 분야와 같이 분류 할 수 있는 데이터들이 많이 있다. 이번에 소개할 데이터 셋은 사이킷런에 있는 위스콘신 유방암 데이터 셋이다. 유방암 데이터 셋은 유방암 세포 특징 10개에 대하여 평균, 표준오차, 최대 이상치가 기록되어 있다.
유방암 데이터 세트의 분석 목표는 유방암 데이터 샘플이 악성 종양인기 정상 종양인지 분류하는 문제 이다.
1. 유방암 데이터 세트
분류 하는 뉴런 part 1
분류하는 뉴런은 딥러닝에서 가장 많이 사용하는 것이다. 일반 데이터를 분류하고자 할때는 데이터가 없어서, 분류를 하지 못하였다면, 사진이나 글 같은 비정형 데이터는 상당히 많다. 하지만, 그것을 하는데도 사전에 전처리 기술이 필요하지만, 딥러닝은 퍼셉트론을 기반으로 지속적으로 발전 해 온 것도 사실이다.
1. Perceptron(퍼셉트론)
기초 통계 2 [ 최대 우도법, 오즈비, 로짓 함수, 로지스틱 함수, 크로스 엔트로피]
분류에 관련된 통계를 시작한다, 항상 분류에 대한 통계를 들어 갈 때는 강좌를 하는 사람이나 받는 사람 모두 부담이 된다. 최근에 딥러닝이, 그나마 성숙하고 성장하게 된 계기는 분류에 대한 부분이 최근에 발달이 잘 되어서 이다. 조금 어렵지만, 강의 자료인 만큼 쉽게 풀어서 쓸 것이다.
1. 최대 우도법
선형 회귀를 위한 뉴런
선형회귀를 위한 뉴런은 앞서 이야기 한 부분을 클래스 만들어 정리 하는 것이다. 초기에 알고리즘을 만들고 나면 클래스 형태로 정리 해야만, 나중에 큰 프로젝트 할때 유리 하다.
선형 회귀는 정방향 계산에서 부터 시작 이 된다.
$ y = w * x +b $
파이썬에서 함수를 사용할때 def를 써야 하는데, def__init__(self)는 변수 초기화 할때 사용한다. 그리고 나머지는 사용자 함수로서 사용한다.
1) 정방향 (forpass) 계산
class만들 때는 self가 반드시 들어 간다 self는 현재의 인스턴스 객체를 가르키는 기능으로 쉽게 풀어 이야기 하면 self의 사전적 의미는 그대로 자기 자신을 이야기 한다. self라는 지시어는 이름공간(namespace)와 관련 있다. 주의점은 클래스 내에서 함수가 정의 될때, 첫번째 매개변수는 self 이어야 한다.
2) 역방향(backpropagation) 계산
선형회귀에 대한 손실함수는 앞에서 증명 하였다. 손실함수의 증명된 결과는 아래와 같다.
$ { \partial SL \over \partial w } = -(y - \hat{y})x $
$ { \partial SL \over \partial b } = -(y - \hat{y}) $
w_grade = x * err
b_grade = 1 * err
위 그림은 가중치 및 절편에 대한 경사하강법(gradient descent) 계산 하는 것이다. 위에 있는 가중치와 절편의 손실값을 계산 하여, 새로운 가중치와 절편을 만드는 것이다. 이렇게 계속 계산 하다 보면, 손실값이 가장 적은 시점이 오게 되는데, 그때가 우리가 이야기하는 최적화 된 값이 나오게 된다.
3) 훈련을 위한 fit 구하기
for i in range(epochs):
for x_i, y_i in zip(x, y):
y_hat = self.forpass(x_i)
err = -(y_i – y_hat)
w_grad, b_grad = self.backporp(x_i, err)
self.w -= w_grade
self.b -= b_grade
Neuron 이라는 클래스에 초기화 함수 정방향 함수, 역방향 함수, 모델 fitting화 하는 함수인 fit 함수가 있다. 이를 실행 하는 방법은 아주 간단하다.
첫번째 클래스 객체를 활성화 시킨다.
neuron = Neuron()
두번째 객체 에서 x와 y값을 넣고 활성화 한다.
neuron.fit(x, y)
세번째 가중치와 절편을 본다.
print(neuron. w, neron.b)
4) 학습 완료된 가중치와 절편 확인 하기
neuron.w(가중치), neuron.b(절편)
plt1 = (-0.1, -0.1 * neuron.w + neuron.b)
plt2 = (0.15, 0.15 * neuron.w + neuron.b
plt.plot([pt1[0], pt2[0]], [pt1[1], pt2[1]])
plt.xlabel(‘x’)
plt.ylablel(‘y’)
plt.show()
경사 하강법을 적용 하여, 회귀 분석 알고리즘을 완성 하였다. 자세한 소스코드는 아래를 클릭 하면 된다.
※ 참고서적 : 정직하게 코딩하며 배우는 딥러닝 입문 (이지스퍼블리싱)
경사 하강법(gradient descent) 으로 학습 하는 방법 야나두 딥러닝
선형 회귀의 목표는 입력 데이터 (x)와 타깃 데이터 (y)를 통해 기울기가 절편을 찾는 것이었다. 즉 최소 제곱법에 의해 관측치와 평균치의 차이를 비교해서 기울기와 절편을 찾았다.
경사하강법(gradient descent) 바로 그 방법 중에 하나이다. 경사 하강법은 모델이 데이터를 잘 표현 할수 있도록 기울기 (변화율)을 사용하여 조금씩 조정하는 최적화 알고리즘 이다. 경사 하강법은 모델이 데이터를 잘 표현 할 수 있도록 기울기(변화율을) 사용하여 조금씩 조정 하는 최적화 알고리즘 이다.
1. 데이터 셋 설명
통계 기초 1 [평균, 분산, 표준편차, 정규분포, 회귀분석]
딥러닝에서 왜 통계를 다루는 이유는 딥러닝을 배우려면 초기 모델부터 가야 하는데, 초기 모델은 대부분 통계에서 시작 되기 때문이다. 초기의 뉴런은 회귀 방정식에서 나온 직선 가지고 검증을 하였기 때문이다. 통계 기초는 다른 깊은 부분을 이야기 하기 보다는 회귀 분석 까지 가기 까지의 과정만 이야기 할 예정 이다.
회귀분석까지 가려면, 아래의 그림과 같다. 그리고, 통계 기초에 대해서는 이 한 개의 포스트로 정리 한다.
1. 평균
엔트로피 𝑒𝑛𝑡𝑟𝑜𝑝𝑦 대한 이해 딥러닝 기초
딥러닝 손실 함수 사용할때, 약방의 감초처럼 나오는 엔트로피 함수, 이것을 모르면, 일단 딥러닝을 모른 다 할 정도로 엔트로피 함수는 중요 하다. 딥러닝에서는 손실값을 구할때 사용하는 것으로, 사실상 손실 값을 계산 하지 않으면, 실제로 모델을 실행 시키고 나서 모델의 결과 값을 알수 가 없다. 모형에 대한 평가는 엔트로피 함수 기반으로 한다.
이것의 기원은 볼츠만의 엔트로피로 부터 나온다.
공식은 S = K log W 이다.
불츠만이라는 분은 살아서는 인정을 받지 못하였는데, 죽어서 인정을 받으셨던 분이다. 이것이 있어서 오늘날 통계학이나 인공지능이 많이 발전 했다.
1. 불츠만의 앤트로피
딥러닝 하면서 필요한 것 및 수학 필수 이론
딥러닝을 그냥 시작 하면 매우 어려울 수도 있다. 왜냐 하면, 선형대수학이나, 통계학에 대한 기초 이론이 있어야 어느 정도 가능 하다. 이번에 하는 시간은 매우 적지만, 기초에 대한 부분을 우선 적으로 다룰 예정이다.
1. 딥러닝에 필요한 것들
야나두 딥러닝 R 과 Python의 비교
통계학과 출신인 필자는 R위주로 업무를 해오고, R에 대한 것만 다루었다. R과 Python의 차이점은 아래 그림과 같다.
R은 통계 패키지 이다. 개발 툴이 아니다. R을 CRAN 사이트에서 수없이 많은 Package를 받아 사용 할 수 있다. 전 세계의 개발자나, 통계 학자들이, 아주 어려운 것을 쉽게 풀어 패키지를 만든다. 따라서 R은 누가 만들어 놓은 것 가지고, 데이터 파라메터를 조정 하면서 사용 할 수 있다.
필자가 사용한 예는 고장 분석의 와이블 분포인데, 신뢰성 공학에서 가장 어려운 부분이다. 하지만 UCL의 Yves Deville 교수가 "Renext" 라는 패키지를 만들어 쉽게 사용 할 수 있게 만들었다.
Python은 조금 다르다. numpy가 있는데 그건 기본 패키지 이고, Pandas는 데이터 프레임을 다루는것이고, 사이킷럿인 있는데, 그것은 머신러닝을 다루는 툴이다. 딥러닝을 다루는 텐서 플로우나 케라스가 있으나, 전부다 개발하는 사람의 역량에 따라 코드가 바뀌어 진다.
R이나 Python 전부 전처리를 하는데R을 전처리하는 패키지를 돌리지만 Python은 직접 코드를 짜서 하는 경우가 많다.
R은 통계학의 기본 이론만 알면 되는데, 파이썬은 개발자의 개인기와 수학에 의해 많이 의존이 된다.하지만, 파이썬이 R보다 좋은 이유는 R은 데이터 분석에서 끝나지만, Python은 머신러닝/딥러닝과 같이 모델링을 한 후에 그 결과를 하드웨어 컨트롤 하는데 사용 할 수 있다. 산업 현장에서는 파이썬이 R 보다 더욱 중요 해 졌다.
R은 하드웨서 컨트롤을 할 수 없으니, 전사 ERP 시스템과 연동 하는 과제나, 아니면 IOT 플랫폼 내에서 고장에 대한 예측이나, 빅데이터를 다룰 수 있다. 일반적으로 R은 C++ 이나, JAVA를 입혀서 Pakcage 를 만든다. 그것 때문에 속도가 늦는 측면이 있는데, 사용하기는 편리 하다.
Python은 용접 심추적 장치와 같이 사진을 보고 하드웨어 컨트롤 하는데, 주로 사용한다. 4차 산업의 메카가 된것은 Python이 아닐까라는 생각이 든다. 4차 산업은 2차 산업의 확대 버전 이기 때문이다.
야나두 딥러닝 [ 많이 사용되어 지는 통계 및 인공지능]
모형에 많이 사용 되어 지는 통계 및 인공지능은 아래와 같다. 선형 예측 보다는 Classifier 들이 더 많이 존재 한다. 실무에서는 Classifier가 거의 없다. 거의 대부분은 변화 하는 수가 아니라, 정의 되어 있는 수 (즉 Information 정보) 데이터 이다.
종속 변수에 영향을 주는 독립 변수가 대부분 1개 ~2개 정도 되기 때문에 Classifier를 사용하기가 어렵다. 변수들의 구성을 보았을때, 정보성 변수등 등급이 있는 경우가 있다. 회사내에서는 직급, 근속년수, 근무지역 별로 나누어 지는데, 어떤 것을 분석 하느냐에 따라서, 전부 달라 진다.
위의 PPT 자료는 선형 회귀 빼고는 모두 Classifier를 사용한 모형이다. 하지만, Random forest 랜덤 포레스트는 Classifier 말고 회귀 분석을 하는 경우가 있다.
Linear Regression : 종속변수 y와 한 개 이상의 독립변수 X와의 선형상관관계 모델링
Logistic Regression : 독립변수의 선형 결합을 이용하여 사건의 발생 가능성 예측
종속변수가 범주형 데이터를 대상으로 하여 분류문제로 봄
Ubuntu에 CUDA /Tensorflow 2.4 GPU 사용
- 콘솔환경 설정 : 여기를 클릭 하십시오.
3. Nvidia CUDA 설치
Cuda 설치 하기 위한 Ubuntu 기본 세팅
R 에도 TensorFlow가 돌아간다. GPU설정만 잘하면 되는데, 항상 Path문제가 발생 하는데, 일단, 아직 그 적정한 Path를 찾지 못하고 있다. 하지만, Python에서는 아래와 같이 TensorFlow가 잘 돌아 간다.
RTX3080 GPU를 구입 하고 나서, GPU설정 하려고, 구글링을 엄청 나게 하였지만, 성공하지 못하였다가 카이스트에서 인공지능 교육 받고 있을때, RTX 관련된 문서를 받았다. 이것도 처음에는 잘 되지 않다가, 카이스트 문서를 Base로 해서 여러번 구글링 하다가 결국은 찾아 냈다.
지금 개인 서버 운영 하고 있는데, 지금은 R을 하고 있고, 딥러닝은 겨울철에 돌려야 난방효과도 좋으니, 계절에 따라서 바꾸어 하려고 한다. 정말 더운 여름철에 에어컨 까지 틀면서, 딥러닝 서버를 일반 가정집에서 돌리기에는 정말로 비용부담이 크다.
여름을 나기 위해, 점검 중에 문제가 생겨서, 우분투 리눅스를 설치 하고 나서 아래와 같이 정리 하였다.
1. 우분투 그래픽 및 ssh 설정
css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소
앞에서는 html의 간단한 sheet를 소개 하였습니다. html은 주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다. 아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다. body 부분의 css 코딩 ...
-
KoLNP 로딩하면 아래와 같은 메시지가 나올 경우가 있다. warning message: in i.p(...) : 패키지 ‘c:/users/rdmkyg/appdata/local/temp/rtmps6vlku/file23e45dd83537/konlp...
-
CNN 하면서 이미지 데이터 전처리는 아주 중요한 것이다. 본인이 수집하거나 관찰 한 사진이 많고, 데이터 라벨 작업을 하였다면, 아래와 같은 딥러닝 할 수 있는 데이터 셋을 만들어야 한다. 즉 feature (image) 값과 l...
-
네이버 지식인에서 아래와 같은 질문이 왔다. 미국 연방기금금리 1%p 인상이 미국의 실업률과 인플레이션율에 미치는 동태적 영향을 VAR 모형과 직교화충격반응함수를 이용해 분석하시오 .라는 과제를 받았습니다.. rstudio의 VAR함...
-
통계학에서 베이블 분포(Weibull distribution)는 연속확률 분포로써 고장 확률에 대한 예측에 대하여 많이 쓰인다. 신뢰도를 측정하는데 많이 쓰이는데, 시스템 혹은 부품이 작동을 시작하여 그 시점까지 고장 나지 않고 여전히...
-
Windows 버전에서는 패키지 설치가 아주 쉽지만, Ubuntu 버전은 패키지 설치가 매우 어렵다. Linux 특성 상 의존성 에러가 나기 때문이다. 그래서 여러가지 방법으로 패키지를 설치 하는 방법을 설명 하고자 한다. 어찌 되...
-
보안이 매우 중요한 회사에서는 웹사이트가 접속이 제한이 된다. 그래서, R CRAN Mirror 사이트를 선택해서 설치 해야 한다. 앞으로의 보안 정책은 전부다 막고, 일부만 풀어 주는 방식으로 될 것이며, 물론 보안 신청 한...
-
RTX 3080 GPU가 들어 있는 그래픽 카드를 구입한다고 해서, 모든 것이 완벽하게 되는 것이 아니다. 윈도우 환경에서는 딥러닝을 잘 안돌리니까? Ubuntu 환경에서 돌려야 한다. 앞으로 이야기하는 설정은 아래의 서적에 최적화 되었...
-
과대적합을 해결 하는 대표적인 방법 중 하나인 가중치 규제(regularization) 이다. 가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한 하는 기법이다. 가중치를 규제하면 모델의 일반화 성능이 올라간다. 아래 경사가 급...
-
논리연산자 AND,OR는 실무에서 많이 쓰이는 방법이다. R을 처음 시작 하는 컴퓨터 프로그래머는 for문을 많이 사용한다. 하지만 R에서 for문은 속도 측면에서 최악이다. 그리고 AND, OR, IF 문도 for문을 돌리지 않고 dpl...
-
칼만 필터 Kalman filter는 충분히 성숙한 방법이다. 시계열로 부터 새로운 정보를 결합하는 데 사용되고 과거에 알려진 내부 상태 추정 정보를 지능적으로 결합해 준다. 칼만 필터의 최초 사용 사례로는 아폴로 11호 apollo 11 mis...