변이형 오토인코더(Variational AutoEncoder)란 무엇인가? 변이형 오토인코더(Variational AutoEncoder) 모델은 Autoencoder 아키텍처를 상속하지만 잠재 변수의 분포에 대해 강력한 가정을 한다. Variational Autoencoder에서는 잠재공간을 단순한 수의 집합이 아닌 학습된 평균과 표준편차를 지닌 분포로 생각하는 오토인코더 신경망의 변형이다.
변이형 오토인코더(Variational AutoEncoder)란 무엇인가? 변이형 오토인코더(Variational AutoEncoder) 모델은 Autoencoder 아키텍처를 상속하지만 잠재 변수의 분포에 대해 강력한 가정을 한다. Variational Autoencoder에서는 잠재공간을 단순한 수의 집합이 아닌 학습된 평균과 표준편차를 지닌 분포로 생각하는 오토인코더 신경망의 변형이다.
오토인코더 신경망(AutoEncoder)란 무엇인가? 비지도 학습 및 효율적인 코딩을 위한 인공 신경망이다. 소위 인코딩은 고차원 데이터에 대해 효율적인 특징 추출 및 특징 표현을 수행하는 것이다. 따라서 특징 차원 축소에 주로 사용된다. 즉, 원래 데이터를 데이터의 가장 중요한 측면으로 대체하는 방법에 연구의 초점을 맞추고 있다. Autoencoder는 신경망 제품군의 구성원이지만 PCA(Principal Components Analysis)와도 밀접하게 관련되어 있다. 그 주요 특징은 다음과 같다. 1.PCA와 유사한 비지도 머신 러닝 알고리즘이다. 2.PCA와 동일한 목적 함수를 최소화해야 한다. 3.일종의 신경망이다. 4.이 신경망의 목표 출력은 입력이다. 오토인코더는 PCA와 매우 유사하지만 오토인코더는 PCA보다 훨씬 더 유연하다. PCA는 선형 변환만 수행할 수 있기 때문이다. 이전에 공부한 CNN 및 RNN과 마찬가지로 인코딩 및 디코딩이라는 고유한 모듈도 있다. 여전히 구조에서 시작한다. 오토인코더 신경망의 구조 손실 함수는 다음과 같이 직접 주어진다.$$ f, g=\operatorname{argmin}_{f, g} Loss(z, f(g(z))) $$ AutoEncoder는 최적화 과정에서 샘플의 레이블 값을 사용할 필요가 없음을 알 수 있다. 기본적으로 샘플의 입력은 신경망의 입력과 출력으로 동시에 사용되며, 샘플의 추상적인 특징 표현 L은 재구성 오류를 최소화하여 학습되기를 바란다. 이 비지도 최적화 방법은 모델의 다양성을 크게 향상시킨다. 신경망 기반 AutoEncoder 모델의 경우 인코더 부분은 계층별로 뉴런 수를 줄여 데이터를 압축하고, 디코더 부분은 데이터의 추상 표현을 기반으로 계층별로 뉴런 수를 늘리고 최종적으로 입력한 샘플의 재구성을 구현한다. AutoEncoder는 신경망을 통해 각 샘플의 고유한 추상 표현을 학습하기 때문에 신경망의 매개변수가 어느 정도 복잡할 때 AutoEncoder는 과적합되기 쉽다. 기존 AutoEncoder가 과적합되기 쉬운 문제를 완화하기 위해 한 가지 방법은 입력 데이터에 임의의 노이즈를 추가하는 것이다. 예를 들어 아래 그림과 같다. 여기서 노이즈는 지저분한 것이 아니라 특정 분포를 따르는 무작위 노이즈이다. 또 다른 방법은 정규화의 개념을 결합하고 인코더가 간섭 방지의 추상적인 특징을 학습할 수 있도록 인코더의 야코비 행렬 패러다임을 목적 함수에…
장단기 기억 신경망(Long Short-Term Memory(LSTM))란 무엇인가? RNN의 특별한 종류이다. 긴 시퀀스 훈련 동안 역전파에서 기울기 소멸 또는 폭발 문제를 해결하기 위해 만들어진다. 또한 LSTM은 장기적인 종속성 문제를 피하기 위해 명시적으로 설계되었다고 말할 수 있다. 많은 작업에서 표준 버전의 RNN보다 더 나은 결과를 얻었기 때문에 그것을 연구하는 것은 큰 의의가 있다. 이전 연구를 통해 RNN이 CNN과 마찬가지로 완전히 연결된 네트워크의 변형임을 알 수 있다. 그들은 모두 자신의 독특한 결과를 발표했다. 예를 들어 CNN은 부분 연결(수용 필드)과 가중치 공유의 개념을 제안했다. RNN은 시간 단계와 '장기 기억'의 개념을 제시했다(사실 장기기억의 효과는 이루지 못하므로 단기기억이라고 부르는 것이 더 정확하다). LSTM은 진정한 의미의 '장기 기억'을 구현하고 '단기 기억'을 유지한다. 여기에는 게이트(Gate \(\Gamma\))와 셀 상태(Cell state \(c_i\))라는 두 가지 중요한 개념이 있다. 제가 알기로는 단순 RNN 네트워크의 '장기 기억'과 구별하기 위해 'Cell state'라는 새로운 이름을 붙였다. 즉, 단순 RNN에서 달성될 것으로 예상되는 "장기 기억"이 실제로 LSTM에서 구현되어 셀 상태\(c^i\)라는 새로운 이름이 부여된다. 먼저 'Gate'(문)이라는 개념을 이해해야 한다. Gate의 개념 다음 세 가지 임계값이 Forget Gate, Update Gate 및 Output Gate가 포함된다. 그것들은 현재 입력이 받아들여졌는지, 장기기억인지, 또는 메모리의 입력이 현재 출력되는지 여부를 결정하는 데 사용된다. 이 세 개의 문을 통해 뉴런의 상태를 보호하고 제어한다. '역치'라고 해서 이해하는 것이 좋을 것 같다. 이 '밸브'를 통해 게이트 조건을 만족하는 부분이 출력되고, 만족하지 못한 부분은 차단된다. 첫 번째는 망각의 문이다. 이전 타임 스텝에서 전송된 정보의 스크리닝을 완료한다. 1.망각 게이트(Forget Gate) 주로 0과 1 사이의 값을 제어하는 'sigmoid' 활성화 함수로 구성된다. 이는 '선택적 기억' 기능을 구현하는 데 도움이 된다. 0을 곱한 숫자는 0이기 때문에 값이 사라지거나 잊혀진다. 그리고 1을 곱한 데이터가 저장된다. 물론 절대적인 0과 1은 아니다.…
순환 신경망(Recurrent neural network)이란 무엇인가? 우선'리커런트 (Recurrent)'라는 단어부터 시작한다. 주기는 빈번하거나 반복적으로 발생하는 것을 의미한다. 이러한 유형의 신경망은 일련의 시퀀스 입력에 대해 동일한 작업을 반복적으로 수행하기 때문에 순환 신경망이라고 한다. 따라서 순환 신경망을 이해하려면 시퀀스 데이터라는 개념을 이해해야 한다. 시퀀스 데이터(Sequence Data) 데이터 세트의 포인트가 데이터 세트의 다른 포인트에 종속될 때마다 데이터를 순차 데이터라고 한다. 이에 대한 일반적인 예는 주가와 같은 시계열 또는 각 점이 특정 시점의 관찰을 나타내는 센서 데이터이다. 시퀀스, 유전자 시퀀스 및 날씨 데이터와 같은 순차적 데이터의 다른 예가 있다. 다음은 잘 알려진 순차 데이터 다운로드 사이트이다. RNN(순환 신경망)이 필요한 이유 합성곱 신경망은 이미 매우 강력하다. 그럼,RNN이 필요한 이유는 무엇인가? 컨볼루션 신경망이 좋은 영역에서는 대부분의 데이터가 정적이라는 것을 인정해야 한다. 입력 데이터는 이미지와 같은 2차원 데이터와 같이 서로 독립적이다. 그러나 의미 인식 및 시계열 분석과 같은 응용 프로그램의 경우 컨볼루션 신경망은 약간 부적절하다. 우리가 이전에 다룬 모든 네트워크(컨볼루션 신경망 포함)는 각 입력은 개별적으로만 처리할 수 있으며 이전 입력과 다음 입력은 전혀 무관하다. 그러나 일부 작업은 시퀀스 정보를 더 잘 처리할 수 있어야 한다. 즉, 이전 입력이 후속 입력과 관련된다. 예를 들어 여자친구에게 '사랑해'라고 말하고 부모님에게 '사랑해'라고 말할 때, 두 '사랑해'의 문자적 의미는 같지만 문맥에 따라 의미가 다르다. 전자는 연애(여자친구와의)를 표현하고, 후자는 감사(부모와)을 표현한다. 그것들은 완전히 다른 의미를 가지고 있다. 따라서 이전 출력을 기반으로 약간의 편차가 필요하며 이것이 RNN의 목적이다. 즉, RNN에는 이전에 시퀀스 데이터에서 발생한 일에 대한 특정 메모리가 있다. 그러나 실제로 이러한 종류의 메모리는 매우 제한적이다. 이전에 완전히 연결된 신경망에서 다음과 같은 그림을 그렸었다. 그 기반에 작은 것을 추가하면 순환 신경망의 구조 그림이 될 수 있다. W가 표시된 화살표 원을 제거하면…
합성곱 신경망(Convolutional Neural Network)이란 무엇인가? 간단히 말해서 'CNN'은 이미지 처리 분야에서 딥 러닝 알고리즘을 응용한 것이다. 'SVM(Support Vector Machines)' 등과 유사하다. 여전히 분류기로 사용할 수 있으며 여전히 블랙박스처럼 사용할 수 있다. 따라서 합성곱 신경망은 일반 완전히 연결된 신경망(딥 신경망이라고도 할 수 있습니다.)의 최적화된 버전으로 이해할 수 있다. 완전히 연결된 심층 신경망은 다층 퍼셉트론 레이어의 완전 연결된 방법을 채택하여 레이어별로 심층 특징을 추출하여 샘플의 효과적인 특징을 보다 효율적으로 추출한다. 그러나 완전히 연결된 신경망으로 이미지를 처리하는 데에는 다음과 같은 세 가지 문제가 있다. 완전히 연결된 신경망은 이미지를 벡터로 확장해야 하므로 이미지 공간 정보가 손실된다. 완전 연결 신경망의 가중치 값과 같은 매개 변수의 수가 너무 많아 과적합이 쉽게 발생한다. 데이터 훈련 동안 메모리는 많은 양을 차지하고 오랜 시간을 소비한다. 그러나 합성곱 신경망을 사용하면 위의 세 가지 문제를 잘 해결할 수 있다. 로컬 수용 필드(local receptive field), 가중치 공유(weight sharing 또는parameter sharing), 컨볼루션(convolution 연산) 및 풀링(pooling 연산)의 세 가지 메커니즘을 사용하여 이러한 문제를 개선하기 때문이다. 합성곱신경망의 구조 우리는 이미 완전히 연결된 신경망에 대해 논의했습니다. 사실, 그들 사이에는 많은 유사점이 있다. 즉, 컨볼루션 네트워크는 완전 연결되지 않은 방법을 사용하여 완전 연결 네트워크의 선형 변환된 부분을 계산한다. 따라서 완전히 연결된 네트워크는 자신과 같은 크기의 컨볼루션 커널을 사용하여 자신과 컨볼루션 연산을 수행하는 것으로도 이해될 수 있다. 매개변수가 몇 개나 되나?$$N_W = \sum_{l=1}^{L} N_l = \sum_{l=1}^{L} \left( n_{l-1} + 1\right) \times n_l $$\(n\) 계층 완전 연결 네트워크의 매개변수 수를 나타낸다. MNIST(필기 숫자 인식 데이터 세트)를 예로 들면 각 사진에는 28x28 픽셀이 있다. 그러면 784개의 입력 노드와 0에서 9까지 10개의 출력이 있으며, 위의 공식을 통해 7850개의 매개변수를 얻을 수 있다. 이것 도 너무 많다! 사실 우리가 다루는…
완전히 연결된 신경망(fully connected neural network)이란 무엇인가? 완전히 연결된 신경망은 이름에서 알 수 있듯이 인접한 두 계층 사이의 두 노드 사이에 연결이 있다는 것이다. 또한 가장 일반적인 모델이다(예: CNN과 비교 하면). 전체 노드 다 연결되어 있기 때문에 더 많은 가중치와 연결이 발생하므로 더 많은 메모리와 계산이 필요하다. 단순하게 상상하면 다음과 같은 그림이 머릿속에 떠오를 수 있다. 네, 왼쪽이 입력, 중간이 계산, 오른쪽이 출력입니다.방정식으로 설명하면 \(O = f(X)\)로 쓸 수 있다. 여기서 대문자 \(O\)는 찾아야 할 대상 값을 나타내고 대문자 \(X\)는 전체 입력 데이터를 나타내며 \(\)f 매핑은 입력 데이터와 원하는 대상 데이터 사이의 다리를 나타낸다. 그렇다면 신경망을 임의의 함수(여기서 함수는 매우 복잡하며 실제로 모델과 동일함)에 맞는 블랙박스로 이해할 수 있나? 그러나 우리는 여전히 더 많은 구현 원칙을 알고 싶습니다면 이 수준의 이해로는 충분하지 않다. 인공 신경망은 인간의 두뇌를 시뮬레이션하여 만든 알고리즘이라는 것을 알고 있다. 더욱이 인간의 뇌는 수백억 개의 신경 세포로 구성되어 있다. 따라서 우리는 뉴런 세포의 구조와 정보 처리 방식에 대한 이해가 필요하다. 인간의 뉴런과 인공 신경망의 노드 생물학적 관점에서 그 구조와 기능을 분석하는 것은 너무 복잡할 것이다. 구조적으로 보면,뉴런은 다양한 모양과 기능을 가지고 있지만 크게 세포체(Cell body, or Soma)와 신경돌기의 두 부분으로 나눌 수 있다. 신경돌기에는 수상돌기(Dendrites)와 축삭돌기(Axon)의 두 가지 유형이 있습니다.그리고 긴 것은 축삭돌기이고 짧은 것은 수상돌기이다. 기능적으로 보면,뉴런의 종류에 관계없이 수신 영역, 트리거 영역, 전도 영역 및 출력 영역(실제로 후자의 두 영역은 집합적으로 출력 영역이라고 할 수 있음)의 네 부분으로 나눌 수 있다. 그렇다면 뉴런의 정보처리 과정은 여러 개의 수상돌기에서 자극 신호를 전달받은 후 처리를 거치고나서 하나의 축삭에서 출력되는 과정으로 요약될 수 있나? 여기까지만 이해하시면 된다. 인간의 뇌는 인공 신경망에 해당하므로 해당 뉴런 세포는…
호스트 GPU 상태 보기 1.커맨드 라인에서 파이썬 프로그램을 실행할 때 먼저 어떤 GPU가 유휴 상태인지 확인하고 'nvidia-smi' 명령을 통해 현재 GPU 사용량을 확인한다. 아래 그림과 같이 서버에 있는 두 개의 그래픽 카드(0과 1)가 있다. 모두 조용히 쉬고 있다. 위 그림의 관련 지표 GPU: GPU 번호; Nane: GPU 모델; Persistence-M: 연속 모드의 상태입니다. 연속 모드는 많은 에너지를 소비하지만 새 GPU 응용 프로그램을 시작하는 데 시간이 덜 걸린다. Fan: 팬 속도, 0에서 100%까지 다양하다. Temp: 온도, 섭씨 온도; Perf: 성능 상태, P0에서 P12까지, P0은 최대 성능, P12는 상태의 최소 성능을 나타냅니다(즉, GPU가 작동하지 않을 때 P0, 최대 작동 한계에 도달했을 때 P12). Pwr: 사용량/한도: 에너지 소비; Memory-Usage: 메모리 사용량 비율; Bus-Id: 형식은 'domain:bus:device.function'이며 'bus'를 사용하여 그래픽 카드의 실제 위치를 결정할 수 있다. Disp.A: Display Active, GPU 디스플레이가 초기화되었는지 여부를 나타낸다. Volatile GPU-Util: 부동 GPU 활용. Uncorr.ECC: Error Correcting Code, 오류 검사 및 수정; Compute M: compute mode, 컴퓨트 모드. 코드를 실행할 GPU 지정 1.Python 프로그램을 실행하려면 서버 터미널에서 유휴 GPU를 지정한다. 2.Python 프로그램에서 GPU를 지정한다(일반적으로 이 설정 사용). 3.서버 터미널에서 10초마다 GPU 사용량 표시하고 'CTRL + C'를 눌러 중지할 수 있다. 4.서버 터미널에서 2초마다 GPU 사용량을 표시하고 'CTRL + C'를 눌러 중지할 수 있다.
필요한 소프트웨어 이 문서에서는 개인용 컴퓨터에 PuTTy가 이미 설치되어 있다고 가정한다(설치하지 않은 경우 내 다른 문서 "물리적 서버 연결 및 사용 방법" 참조를 합시다). 또한 FileZilla를 설치해야 할 수도 있다. 구체적인 설치 과정은 "FILEZILLA CLIENT 사용하여 파일전송"를 참조합시다. 서버 측 개인 프로그래밍 가상 환경 구축 1.먼저 PuTTy를 열고 서버 ID 주소와 Port 주소를 차례로 입력한다. 그런 다음 Window->Appearance->Change을 클릭하여 글꼴 크기를 설정한다(기본 글꼴 표시는 매우 작음). 모든 설정이 완료되면 Save를 클릭하여 다음 로그인을 용이하게 한다(저장된 연결을 두 번 클릭하여 연결 설정). 마지막으로 Open를 클릭하여 로그인 인터페이스로 이동한다. 2.로그인 인터페이스에 등록된 사용자 이름과 암호를 입력하여 서버에 로그인한다. 3.계정에 로그인한 후 명령줄에 ‘ls -al’ 명령을 입력하면 현재 사용자의 루트 디렉터리에 있는 모든 파일(폴더 및 해당 내용 포함)을 볼 수 있다. 4.그런 다음 루트 디렉터리에 프로그래밍을 위한 폴더를 만들고(‘mkdir ai’ 명령 사용) 이름을 ‘ai’로 지정한다. 새로 생성된 콘텐츠를 보려면 여전히 ‘ls-ai’를 입력합시다.(사용된 명령줄을 입력할 때마다 '↑' 위쪽 화살표 키를 사용하여 빠르게 호출할 수 있다.) 5.'cd ai' 명령어를 입력하여 ai 폴더로 들어간다. 그런 다음 "mkdir code" 명령을 사용하여 코드 파일을 저장할 "code"라는 폴더를 만든다. 그리고 'python3 -m venv myenv' 명령을 사용하여 개인 가상 파이썬 환경을 만든다. 이때 'ai' 폴더 아래에 'code'와 'myenv'라는 두 개의 폴더가 나타난다. 6.그런 다음에는 가상 환경을 활성화하는 것이다. ‘myenv’폴더로 들어가고 'bin' 폴더 안에서 'source <file name>' 명령을 입력하여 파일을 로드한다. 7. 'cd ..' 명령을 통해 이전 'myenv' 디렉토리로 돌아간 다음 ‘pip3 install <library file name>’을 통해 ’jupyter notebook‘,’numpy‘, ’pandas‘, ’keras‘, ’tensorflow‘ 등을 차례로 가상 환경에서 설치하기 시작한다. 후속 설치에서 버그를 방지하기 위해 라이브러리를 설치하기 전에 'pip'('python3 -m…
물리적 서버(Physical Servers) 상대적으로(클라우드 서버와 비교) 강력한 성능과 안정성을 갖춘 실제 하드웨어 전용 독립 호스트 또는 서버 장비를 말한다. 서버와 연결을 설정하고 강력한 성능을 사용하는 방법은 무엇인가? 먼저 컴퓨터에 두 개의 소프트웨어를 설치해야 한다. 하나는 PuTTY(Linux 콘솔 호출용)이고 다른 하나는 Notepad++(코드 작성용)이다. PuTTY['pʌti] 설치 및 사용 1.브라우저에서 PuTTY를 검색하고 다운로드 공식 웹사이트에 접속한다. 2.비트 수에 해당하는 실행 파일(예: 64-bit x86: putty.exe)을 로컬에 다운로드한다. 3.putty.exe라는 실행 파일은 설치 없이 사용할 수 있다. 두 번 클릭하여 연 후 Putty의 기본 인터페이스로 들어간다. 4.연결하려는 대상의 IP 주소 또는 호스트 이름을 패널에 입력한 다음(이 예에서 대상 호스트 이름은 ab.cd.ef.gh임), 아래의 저장된 세션 상자에 세션 이름(이름이 지정된 세션 이름)을 입력한다. 이 예에서는 yeobong_server)를 선택하고 "저장"을 클릭하여 아래 그림과 같이 다음 로그인을 용이하게 하기 위해 현재 설정을 저장한다. 5.Default Settings 열에서 저장한 세션을 선택하고(이 예에서는 연결해야 함: yeobong_server) 열기를 클릭하여 아래 그림과 같이 세션을 연다. 6.그러면 Putty 페이지가 점프하고 점프한 페이지에 접속한 대상의 사용자 계정을 입력하고 Enter 키를 누른 후 비밀번호를 입력하고 인증을 통과하면 다음 그림과 같이 원격으로 로그인할 수 있다. 7.원격 로그인에 성공하면 Putty에서 작업할 수 있다. 조작 방법은 서버에서 조작하는 것과 동일하며 더욱 편리하다. Putty는 Copy & Paste를 지원하기 때문에 매우 편리하게 조작할 수 있다. 8.일반적으로 사용되는 27개의 Linux 명령이 다음과 같다. ls — List mkdir — Make Directory pwd — Print Working Directory …
말하는 방법은 그 사람의 품행과 교양을 가장 잘 반영할 수 있다. 다들 '소통 잘하는' 사람들로 둘러싸여 있고, EQ가 높고, 모든 것을 알고 있어, 그들과의 수다와 교류가 봄바람처럼 편안하게 느껴진다. 퉁명스럽게 자신의 의견을 말하고, 심지어 '말할 필요도 없는' 말까지 하는 사람도 있다. 사람 사이의 감정은 따뜻하고, 가늠할 수 없는 말은 머리에 찬물을 붓는 것과 같아서 감정을 식히고 마음을 아프게 한다. 말하는 데는 1초밖에 걸리지 않지만, 그로 인한 피해는 시간이 지나도 복구할 수 없다. 다른 사람들이 내린 결정을 이해하지 못하거나 승인하지 않을 때 서두르지 말고 거절하거나 평가한다. 사람마다 생각이 다르고, 사물에 대한 관점과 입장이 다르니, 받아들일 필요는 없지만 존중해야 한다. 차가운 말 한마디가 지금 이 순간을 이기게 할 수도 있지만, 본래의 진심을 많이 잃는다. 에너지가 넘칠 뿐만 아니라 주변 사람들에게 자신감과 용기를 주기 때문에 사람들은 종종 긍정적인 에너지를 가진 사람들과 함께 하라고 말한다. 불평할 줄만 아는 사람의 삶은 채워지지 않다. 사람이 문제 자체에서 시작하지 못하고 문제에 대해 생각하고 어려움을 해결하지 못하면 그의 삶은 개선되지 않다. 뇌의 잠재의식의 힘은 매우 강력한다. 매일매일 잘하고 있지 않다고 강조한다면, 삶은 정말 점점 더 나빠질 것이다. 아무나 힘들지 않게 살 수는 없다. 과도한 부정적인 에너지는 다른 사람의 인내와 기대를 소모한다. 인생을 웃는 법을 배우면 인생은 그에 대한 보답으로 노래할 것이다. 말을 잘하는 사람은 웃기고 말 못하는 사람은 짜증이 난다. 대인 관계의 문제는 거의 항상 부적절한 언어로 인해 발생한다. 언어는 거리를 더 가깝게 만들 수도 있고 관계를 파괴할 수도 있다. 다른 사람이 기분이 좋을 때 찬물을 붓지 말고, 부정적인 기운을 퍼뜨리는 사람이 되지 마다. 어떤 말은 말없이 인생을 더 아름답게 할 수 있다.