Category Archives: Artificial Intelligence

Switch to Conjugate Gradient

Since I posted about autoencoder neural network on my blog (2 years ago), there are many people visit my Github for that code, Hooray !! Thank you very much everyone. And again I have a new update for that code. I switch to use Conjugate Gradient instead of generative back-propagation. Someone may think is that take 2 years to update it, NO but i’m too lazy.

While I posting autoencoder article, I realize that we need better than normal backpropagation. So I try to explore “What is the easy way to change and what algorithm to swiched to?”. Then I found that in scipy library, it contains optimization algorithm in scipy.optimize module. So you can change the optimization algorithm whatever you want that build within scipy.optimize module. This link is refer to Github page of old autoencoder but the Conjugate Gradient is on conjugate branch.

Why do I switch to Conjugate Gradient? After I study UFLDL lesson within advance optimization part. There is a phrase say that Conjugate Gradient is better than Gradient Descent (Classic Back-propagation). So I started to study about Conjugate Descent and other advance optimization, but I don’t understand them. Finally, I found out the workaround to improve my implementation by using scipy library. If anyone have any suggestion, please comment. Thanks.

Uber Dynamic Pricing Model

คราวนี้มาเป็นเรื่องแปลเหมือนกันหลายคนคงเบื่อ อย่าพึ่งเบื่อลองอ่านดูก่อน ปกติผู้เขียนเป็นคนที่ใช้บริการ Uber ระดับหนึ่งคือเปิด Uber ดูก่อนว่ามีรถใกล้ๆ มั้ย ถ้าใกล้ก็เรียกถ้าไกลก็ออกไปโบกแท๊กซี่แทน และแล้วก็ได้มีโอกาสคุยกับคนขับ ถามว่าได้เงินดีมั้ย คนขับบอกว่า ดีนะตอนแรกก็รู้สึกว่าไม่คุ้มตอนที่รับผู้โดยสาร แต่ตอนที่บิลจ่ายเงินมานั้น Uber จะมีการประกันรายได้อยู่ว่าถ้าช่วงนี้ทำไม่ได้ตามเป้าจะมีการจ่ายให้ตามเป้าด้วย เมื่อได้ฟังดังนั้นจึงเกิดการสงสัยขึ้นทันทีว่า ห๊ะ ประกันรายได้ แล้วบริษัทเอาเงินจากไหนมาจ่ายหล่ะ จึงลองไปหาดู

ปรากฎว่า ไม่ได้มีการประกันรายได้ทุกคน (ไม่รู้จริงเปล่า) ต้องเป็นคนที่ทำเควสของ Uber ได้ เท่านั้นก็เก็ทเลย จึงทำให้สงสัยขึ้นมาทันทีว่าแล้วใครคิดเควสหล่ะ แล้วรู้ได้ไงว่าจะต้องมอบเควสให้กับใคร พอลองศึกษาเพิ่มก็พบกับคำๆหนึ่งคือ Gamification เป็นเรื่องของการที่เอาองค์ประกอบของเกม มาใช้กับชีวิตประจำวันให้สนุกและท้าทายขึ้น เช่น มีระบบ Point ระบบ Level เพื่อเพิ่มความสนุกและสร้างฐานผู้ใช้ที่ดีเลยทีเดียว เพราะงั้น Uber ใช้ระบบจัดการแบบออโต้เพื่อจัดการทุกอย่างเลย อย่างโหด

Uber ยังไม่มีการเปิดเผยใดๆ เรื่องของเควส (จริงๆ แล้วหาไม่เจอแหละแฮะๆ) เนื่องจากเป็นคนชื่นชอบเรื่องอัลกอริทึม เลยลองหาดูว่าแล้วมีอย่างอื่นที่ Uber ทำหรือไม่ ปรากฎเจอเรื่อง Dynamic Pricing Model คือการปรับราคาตามความต้องการของตลาด ถ้าพูดให้ถูกภาษาเศรฐศาสตร์ คือ Supply & Demand เช่น ผู้โดยสารต้องการเยอะ Uber จะขึ้นราคาเพื่อให้คนที่ต้องการใช้บริการ Uber จริงๆ เพราะคนขับมีจำกัด เมื่อหมดช่วงเวลาเร่วด่วนก็ปรับราคากลับมาเท่าเดิม ดูเหมือนง่ายเลย แต่มีส่วนผสมในรายละเอียดของ Dynamic Pricing Model อีกมาก เช่น ต้องคาดเดาให้ได้ก่อนเกิดชั่วโมงเร่งด่วนจากนั้นจะมี notification ไปบอกคนขับว่าออกมาขับได้แล้วได้เงินเพิ่มนะ หรือการเตือนผู้โดยสารอย่างไรเพื่อไม่ให้ผู้โดยสารโมโหว่าทำไมขึ้นราคาแพงจังเลย

นอกจากนั้น Uber ยังมีการให้ผู้โดยสารให้คะแนนคนขับ และให้คนขับให้คะแนนผู้โดยสารเพื่อดูพฤติกรรมอีกด้วย นอกจากนั้นยังมีการดูว่าคนขับปฎิเสธผู้โดยสารบ่อยรึเปล่าและอื่นๆอีก ซึ่งระบบ Dynamic Pricing Model ไม่ได้มีแต่ใน Uber นะ โรงแรม สายการบินและอื่นๆ ก็ใช้ระบบนี้กันทั้งนั้น สุดท้าย Uber บอกว่าการปรับราคาตามความต้องการของตลาดนั้นไม่มีผลต่อผู้ใช้มากเท่าไหร่เพราะเมื่อผู้ใช้รู้สึกว่าแพงเกินไปไม่อยากจ่าย ก็จะพบว่าแท๊กซี่ช่วงนั้นก็หายากเช่นกัน (มันเลยแพงไง ก็ชั่วโมงเร่งด่วนหนิ) ทำให้ผู้โดยสารไม่ค่อยติมากเท่าใด

ใครสนใจลองไปอ่านต่อเพิ่มเติมได้นะจาก Reference ข้างล่าง ยังไงคราวหน้าจะเตรียมเนื้อหาให้ดีกว่านี้นะ และจะใส่รูปเพิ่มขึ้นด้วยนะ ยังไงก็ติดตามกันนะ สุดท้ายนี้อยากบอกว่าไม่ได้ค่าโฆษณาจาก Uber แต่อย่างใด ขอบคุณครับ

Deep learning with Autoencoder

In past 10 years, machine learning is the most attractive subject, especially deep learning. Deep learning is the novel method to understand what ours brain think and percept. It begins in 1959, researchers found that cat’s brain can recognize picture by extract edges first, then lines, then surfaces, and objects. From this hypothesis, machine learning researchers adapt this idea to theirs algorithm and made its similar to real brain. At this time, there are several hardware that provide for deep learning algorithm, such as, Nervana Systems and Drive Px.

I am one of students that interested in this area, so I search for material to learn and practice about deep learning. And I found Machine Learning course from Coursera for beginner and deep learning website for expert. From a lot of articles about deep learning, I selected UFLDL tutorial to begin studying. First, I am not being expert in MATLAB that suggests in this tutorial. So I decide to use Theano python library which is my frequent programming language.

Autoencoder is the simple technique which I chose. Because it is easy to understand and can solve by simple neural network algorithm. Code of autoencoder that follows tutorial, neural network with regularization and sparsity penalty, is given.(https://github.com/chaiso-krit/autoencoder) Dataset that used in this code are 8×8 patch images and come from whiten images, provided by tutorial.

After running code for ~20 minutes, it will show what feature that autoencoder recognize, similar to following picture.

Autoencoder recognized feature