2021/1015

경사하강법(Gradient Descent) 공식 유도 텐서플로우나 케라스와 같은 머신러닝 프레임워크로 경사하강법을 사용하다보면 내부적으로 어떻게 작동하는지, 어떻게 최적의 w와 b값을 얻을 수 있는지 궁금해지신분들이 계실겁니다. 이번 포스팅에서는 경사하강법에 대한 공식유도에 대한 포스팅입니다. 평균값정리랑 편미분정도만 알고계시면 이해하는데 크게 지장없으십니다. 노트로 정리했습니다. 글씨체는 좀 더럽긴합니다. 부가설명 들어갑니다. E 우선 E는 예측값(y_hat)과 y에 대한 평균값이 되겠습니다. 이 부분은 고등학교 미분 시간에 배웠던 평균값정리에 대한 내용이 되겠습니다. 또한 E는 MSE손실함수와 내용이 같습니다. G G는 E를 G에 대하여 편미분한 값과 a(학습률)를 곱한 값에서 G를 뺀값이 되겠습니다. 뺀 이유는 a(학습률)만큼 그래프에서 비용이 적은 .. 2021. 10. 30.
해킹도구 개발 | 리버스 쉘(Reverse shell) 이론및 개발실습 🔥 소개 안녕하세요! 이번에는 해킹도구 개발관련 카테고리가 개설된 후, 관련내용에 대한 첫번째 포스팅입니다! 이번 시간에는 리버스쉘(Reverse shell)에 관하여 포스팅하겠습니다. 🔥 리버스쉘(Reverse shell)이란? 공격자쪽에서 서버포트를 열고 공격대상쪽에서 접속하여 생성하는 쉘입니다. 연결이 설정되면 공격자가 공격 대상자의 컴퓨터에서 실행할 명령을 전송하고 결과를 가져올 수 있습니다. 이러한 이유로 모의해킹의 필수프로그램이 될 수 있었으며 원격으로 쉘을 생성할 때 이용됩니다. 리버스쉘(Reverse shell)이나 바인드쉘(Bind shell)을 실습할 수 있는 대표적인 사례로는 netcat이 있습니다. (해당 포스팅에서는 netcat같은 외부 툴의 의존없이 처음부터 끝까지 직접 다 만들.. 2021. 10. 19.
파이썬 UI/그래픽스 | 1. 윈도우와 라벨 저번 글(파이썬 UI/그래픽스 | 0. 라이브러리 설치 및 시작하기)에 이어서 이번 포스팅에는 윈도우와 라벨에 관하여 포스팅하겠습니다. 대략적으로 이번 포스팅에서 배울 내용을 요약하자면, tkinter에서의 윈도우창에윈도 창에 관한 내용과 윈도 창에 문자를 집어넣을 수 있는 라벨에 관한 내용입니다. 그러면 딴소리말고 바로 시작하겠습니다. 0. 윈도우 우선 우리는 저번 시간에서 기본적인 윈도 창을 생성해보기만 했었습니다. import tkinter def windowOptions(win): pass def CanvasSettings(win): pass def main(): win = tkinter.Tk() windowOptions(win) CanvasSettings(win) win.mainloop() if.. 2021. 10. 19.
C++ | 문자열 안에서 특정 문자열 찾기 안녕하세요!! 이번에는 c++ 문자열 안에서 특정 문자열을 찾는 방법에 관하여 소스코드와 이론을 통하여 설명하겠습니다. 소스코드 #include #include #include std::vector findText(const std::string text, const std::string input){ std::vector result; std::size_t nPos = 0; for(;;){ nPos = text.find(input, nPos); // text[nPos]부터 input이라는 문자열을 찾는다 if( nPos != std::string::npos ) { // 만약 찾았다면 std::string subtext = text.substr(nPos, input.size()); // 문자열쪼개기 st.. 2021. 10. 17.
파이썬 UI/그래픽스 | 0. 라이브러리 설치및 시작하기 그래픽(Graphic)은 그리스어 낱말 γραφικός (그라피아)에서 온 것으로, 상품화, 정보 제공, 일러스트레이트, 엔터테인먼트를 위한, 벽, 캔버스, 컴퓨터 화면, 종이, 돌과 같은 어떠한 표면에 보여 줄 시각 표현이라고 합니다. c++의 Gdi+에서도 다음과 같이 윈도 창에 그림 및 여러 가지 UI를 사용하여 사용자 정의로 디자인하는 것이 가능합니다. 우리는 이제부터 Python(3.8.8)을 이용하여 이러한 UI및 여러 가지 그래픽스에 관하여 알아보겠습니다. 0. 라이브러리 설치 우선 파이썬은 무엇을 하든간에 라이브러리부터 설치해야 합니다. 우리는 그중 Tkinter라는 모듈을 사용할 겁니다. 설치는 커맨드 프롬프트에다가 다음과 같이 입력해주세요! pip install tkinter 설치가 다.. 2021. 10. 16.
머신러닝 | 퍼셉트론(Perceptron) 이론과 실습 현재 머신러닝 분야에서 인공신경망의 근원이 되는 퍼셉트론(Perceptron)에 관하여 저가 개인적으로 공부한 내용을 바탕으로 포스팅을 진행하겠습니다. 퍼셉트론(Perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 제안한 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘입니다. 퍼셉트론(Perceptron)은 위 사진처럼 여러 개의 입력값을 집어넣으면, 가중치와 편향에 의해서 새로운 결괏값으로써 변환되어 나옵니다. 가중치(w)는 입력 신호가 결과에 주는 영향력을 나타내며, 편향(b)은 뉴런이 얼마나 쉽게 활성화되느냐에 대한 수치입니다. 이 단순한 퍼셉트론의 활성화 함수는 다음과 같습니다. \( if \sum_i^n [x_{i} \cdot w.. 2021. 10. 15.
머신러닝 | 과대적합 줄이는 법 참조한 책 https://bimage.interpark.com/partner/goods_image/4/9/7/7/332334977g.jpg 1. 훈련데이터의 잡음을 줄인다. (오류 데이터수정과 이상치제거) 2. 훈련데이터를 더 많이 모은다. 3. 훈련데이터의 특성 수를 줄이거나, 모델에 제약을 가하여 단순화 한다. 2021. 10. 15.
머신러닝 | 책 구매~!! 드디어 책이 도착했습니다!!!!! ㅠㅠㅠㅠㅠ 기분 좋아라~~~ 학교에 가져가서 심심할 때 읽으려고 했지만, 잘 생각해보니 그냥 집에서만 읽으려고요. 프로그래밍 관련 책은 진짜 필요하지 않은 이상 구매는 안 하지만.. (저번엔 알고리즘 책 구매함!!) 이번에는 책의 도움이 필요할 것 같습니다. 이제 인터넷에서 힘겹고 불 친절한 곳에서 공부하는 생활아 안녕~!!!!! 나는 머신러닝 이제부터 책으로 공부한다 헤헤헿 2021. 10. 14.
배열의 차원을 구하는 방법 C++ (강화버전) 안녕하세요!! 이번에는 저번에 배열의 차원의 찻수를 구하는 방법에 관하여 포스팅했습니다. 몇시간 더 삽질하면서, "벡터에 클래스가 들어와도 정상적으로 작동시킬수 없을까?"라는 생각이 들어서 강화버전을 준비했습니다. https://mawile.tistory.com/206 배열의 차원을 구하는 방법 C++ 우리는 흔히 배열의 크기를 구하고는 합니다. 예를들어서 이런식으로 말이죠.. int main() { int arr[5]; int size = sizeof(arr) / sizeof(arr[0]); } 하지만 ... 만약 아래 코드와 같은 5차원 배열이 존재할때,.. mawile.tistory.com 이번에는 저번에 만들었던 로직을 살짝수정하여 좀더 강력하게, 클래스가 와도 정상작동되게 수정했죠...훗.. #.. 2021. 10. 12.
배열의 차원을 구하는 방법 C++ [ 강화버전 ] https://mawile.tistory.com/207 배열의 차원을 구하는 방법 C++ (강화버전) 안녕하세요!! 이번에는 저번에 배열의 차원의 찻수를 구하는 방법에 관하여 포스팅했습니다. 몇시간 더 삽질하면서, "벡터에 클래스가 들어와도 정상적으로 작동시킬수 없을까?"라는 생각이 들 mawile.tistory.com 우리는 흔히 배열의 크기를 구하고는 합니다. 예를들어서 이런식으로 말이죠.. int main() { int arr[5]; int size = sizeof(arr) / sizeof(arr[0]); } 하지만 ... 만약 아래 코드와 같은 5차원 배열이 존재할때, 이 배열의 찻수인 "5"를 프로그램에게 알리려면... 즉, n차원 배열이 있다고할때, 프로그램에게 그 n차원 배열.. 2021. 10. 11.
Softmax function 구현하기 C++ 머신러닝에서 어떠한 여러개의 값이 주어졌을때, 그 여러개의 값중에서 임의의로 고른값을 확률의 수치로써 사용하기위해서 고안된 함수입니다. 예를들어서, 다음과 같은 배열이 있다고할때... [ 2, 3, 5 ] 만약 여기서 "2"를 고를때 전체 배열의 합에서의 확률(차지하는 빈도)의 수치는 몇인가? 에 대한 답을 제시해주는것이 "Softmax function"입니다. 우선 소프트맥스함수는 아래와 같이 생겼습니다. 흠.. 의외로 엄청 심플하게 생겼습니다. 실제 C++코드로 옮기면 다음과 같습니다. #include #include #include // https://www.HostMath.com/Show.aspx?Code=f(sj)%20%3D%20%5Cfrac%7Be%5E%7Bsj%7D%7D%7B%5Csum_%7.. 2021. 10. 11.
머신러닝 | 로지스틱회귀(Logistic Regression) 이론및 실습 [ 단일클래스, 이진분류 ] C++에서 아무 라이브러리의 도움없이 다중입력의 로지스틱회귀를 구현하는 강좌입니다. 벨로그에다가 포스팅해놨습니다. 봐주세요~!! https://velog.io/@dpmawile/LogisticRegressionCpp 로지스틱회귀 구현하기 C++ C++에서 라이브러리없이 다중입력과 로지스틱회귀 구현하기. velog.io 2021. 10. 11.
행렬곱셈 이론및 실습 c++ 본 포스팅은 행렬곱셈(Matrix Multiplication)에 관한 이론및 c++기반의 실습내용을 포함하고 있습니다. 또한 개인적인 공부차원에서 작성한 글입니다. 참조및 도움 https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88 행렬 곱셈 - 위키백과, 우리 모두의 백과사전 행렬 곱셈을 위해선 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 첫째 행렬의 행 갯수와 둘째 행렬의 열 갯수를 가진다. 행렬 곱셈(matrix mul ko.wikipedia.org http://mathurl.com/ mathURL mathurl.com 행렬 곱셈이란? 두 개의 행렬에서 한 개의 행렬을 만들어내는 이.. 2021. 10. 9.
머신러닝 | 선형회귀(Linear Regression) 이론및 실습 [ 단일클래스, 단일분류 ] 안녕하세요! 파이썬에서 tensorflow의 keras로 object detection, mnist를 이용하여 손글씨 학습하기, 등등 softmax층과 relu층을 이용한 다양한 실습을 하면서 흥미를 찾아가는 머신러닝 입문자입니다. 최근에 경사하강법에 관하여 c++에서 갑자기 구현해보고 싶어서 방금 만들어봤는데, 진짜로 이론대로 그대로 하니까 되더라구요..!!!ㅋㅋㅋㅋㅋ 신기해서 직접 쓴 경사하강법 코드 올립니다. (경사하강법에 대한 공식유도를 알고싶으신분들은 아래 링크로 이동해주시기 바랍니다.) https://mawile.tistory.com/222 경사하강법(Gradient Descent) 공식 유도 텐서플로우나 케라스와 같은 머신러닝 프레임워크로 경사하강법을 사용하다보면 내부적으로 어떻게 작동하는지.. 2021. 10. 9.
머신러닝 공부일지 (선형회귀 Matrics Multiplication과 로지스틱회귀) 오늘도 공부내용과 함께 직접 작성한 소스코드를 가져왔습니다! 우선 이번에는 선형회귀에서 여러개의 X값을 받을때 무조건!! 알아야하는 개념인 "Matrics Multiplication"과 로지스틱회귀의 Hypnothesis, cost function에 관하여 공부하였습니다. 사실 지금은 "Multinomial Logistic Regression"에 관하여 공부하고있지만, 차곡차곡 공부내용을 올린다는 마인드로 가고있습니다! 우선 이제부터 Input의 값이 많아지기때문에, 파일에 값들을 저장하고 읽어들이는 방법에 관하여도 공부했습니다. 우선 "Matrics Multiplication" 에 관하여 아래링크를 남겨놓았으니, 궁금한 분들은 아래링크로 타고 들어가 주시기바랍니다. https://ko.wikipedia.. 2021. 10. 2.